关于错误打包pragma的警告

时间:2016-04-25 17:45:55

标签: c gcc clang pragma

如何让GCC或Clang警告我下面的错误,第2行M应该是N

即使使用-Wall -Wextra -Wunknown-pragmas,这些编译器也不会发出任何警告。

#define N 4
#pragma pack(push, M)

int main() {
  return 0;
}

#pragma pack(pop)

2 个答案:

答案 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'