2012-07-04 34 views
12

Trong chương trình c nàyCó phải tiêu chuẩn cho #if để giả sử các hằng số biểu tượng không xác định là 0 không?

#include<stdio.h> 
int main() 
{ 

     #if UnDefinedSymbolicConstant==0 
       printf("UnDefinedSymbolicConstant is equal to 0\n "); 
     #else 
       printf("UnDefinedSymbolicConstant is not equal to 0\n"); 

     #endif 
     return 0; 
} 

UnDefinedSymbolicConstant vẫn chưa #define bất cứ nơi nào, nó vẫn đã được giả định là 0 và cung cấp cho các output on gcc-4.3.4 như:

UnDefinedSymbolicConstant is equal to 0 

vậy, Đây có phải là hành vi chuẩn hoặc nó hoạt động như thế này chỉ trong gcc?

+0

Một cách hay để tìm hiểu xem nội dung nào đó có chuẩn hay không là -std = c99 -pantic. Điều này sẽ tắt tất cả các tiện ích mở rộng gcc. Nếu không có chúng, gcc sẽ phù hợp với tiêu chuẩn. – Lundin

+2

Bạn có chắc chắn '-std = c99 -pedantic' bắt tất cả các cấu trúc không chuẩn không? Nó dường như được dự định, nhưng nếu tôi không nhầm, nó vẫn còn nhớ một số. Về cơ bản tất cả những gì bạn có thể dựa vào '-std = c99' để làm là tránh cho phép mọi thứ xung đột với hành vi được chỉ định tiêu chuẩn, nhưng nó không nhất thiết ngăn bạn làm những việc không xung đột nhưng không được chỉ định bởi chuẩn mực. '-pedantic' được dự định để cảnh báo bạn về cái sau nhưng tôi không tin là nó đã hoàn thành. –

Trả lời

13

Vâng, điều này được quy định theo tiêu chuẩn trong 6.10.1:

Sau khi tất cả thay thế do sự bành trướng vĩ mô và các nhà điều hành unary định nghĩa đã được thực hiện, tất cả các định danh còn lại (bao gồm cả những giải nghĩa từ vựng giống với từ khóa) được thay thế bằng số pp 0

6

Đây là mặc định, nhưng ít nhất bạn có thể tạo cảnh báo cho điều này bằng cách sử dụng tùy chọn -Wundef cho gcc.

'-Wundef ': Cảnh báo bất cứ khi nào một định danh mà không phải là một vĩ mô đang gặp phải trong một # nếu `' chỉ thị, bên ngoài của` định nghĩa'. Các số nhận dạng như vậy là được thay thế bằng không.

Các vấn đề liên quan