如何让GCC或Clang警告我下面的错误,第2行M
应该是N
?
即使使用-Wall -Wextra -Wunknown-pragmas
,这些编译器也不会发出任何警告。
#define N 4
#pragma pack(push, M)
int main() {
return 0;
}
#pragma pack(pop)
答案 0 :(得分:0)
只有在代码有效的情况下,编译器才能知道您的意图。你可以用这个
来检查自己#ifndef M
#error M not defined
#endif
或者M
是否与N
分开定义
#if M != N
#error M is not N
#endif
答案 1 :(得分:0)
如果查看预处理器的输出,则不会评估编译指示,即如果添加N
,则在预处理器完成后,您将无法获得4
。
我不认为你可以在这里警告,至少不容易,也许预处理器向导可能能够解决它。除非#if
语句中的未定义值存在,否则以下警告无效。
-Wundef
如果您尝试在pragma中添加任何内容,即
#pragma pack(push, (M + 0))
您收到警告,因为该编译指示需要一个整数或标识符,即
warning: expected integer or identifier in '#pragma pack'