如何获得GCC或Clang警告我以下错误,其中M
在第2行应该是N
?关于不正确的包装编译指示的警告
即使有-Wall -Wextra -Wunknown-pragmas
,这些编译器都不会发出任何警告。
#define N 4
#pragma pack(push, M)
int main() {
return 0;
}
#pragma pack(pop)
如何获得GCC或Clang警告我以下错误,其中M
在第2行应该是N
?关于不正确的包装编译指示的警告
即使有-Wall -Wextra -Wunknown-pragmas
,这些编译器都不会发出任何警告。
#define N 4
#pragma pack(push, M)
int main() {
return 0;
}
#pragma pack(pop)
只有当代码有效时,编译器才能知道你的意图。你可以自己去查了这个
#ifndef M
#error M not defined
#endif
或者,如果M
分别从N
这个
#if M != N
#error M is not N
#endif
如果你看看预处理器的输出,如果您添加附注不即计算定义N
预处理器完成后,您将不会收到4
。
我不认为你可以在这里发出警告,至少不容易,也许预处理器向导可能会弄清楚。除非#if
声明中的值未定义,否则以下警告无效。
-Wundef
如果尝试添加任何东西到编译即
#pragma pack(push, (M + 0))
你得到一个警告,因为编译期待即
warning: expected integer or identifier in '#pragma pack'
你似乎认为''M'标识符在'#pragma'中的处理方式与'#i中#'相同fdef'指令。尽管这看起来似乎是合理的,但据我所知,该标准完全取决于实施。你有任何支持你的结论的GCC或Clang文档吗? –
@JohnBollinger你是对的,它在叮当中的处理方式不同,它没有按照我所知道的那样进行评估。 – Harry
的#ifndef中号 #ERROR整数或标识符M没有定义 #endif –