Đối với mã biên dịch cụ thể, đó là phổ biến để xem chỉ thị cpp như:C macro Preprocessor - nét so với giá trị di & thực hành
#if defined (__GNUC__) && (__GNUC__ >= 4)
đó là kiểm tra Preprocessor Tôi thường sử dụng - không dành riêng cho __GNUC__
, nhưng đó là một ví dụ phổ biến. Ngoài ra,
#if (__GNUC__ >= 4)
dường như đáp ứng các yêu cầu tương tự. Có vấn đề tiềm năng với sau này? Không chỉ với gcc, mà còn bất kỳ bộ tiền xử lý chuẩn nào. LHS có thể được đánh giá là một giá trị nhất định, ngay cả khi nó không được xác định? Có bất kỳ cạm bẫy nào đối với phương pháp thứ hai mà bất kỳ luật sư ngôn ngữ nào cũng biết không?
Hoàn toàn đồng ý rằng lựa chọn đầu tiên là tốt hơn vì nó làm cho mục đích rõ ràng hơn và không tốn chi phí. Nó cũng tránh được khả năng không chính xác 'thông qua' mà nhiều trường hợp trình biên dịch/nền tảng được đánh giá. –