为什么我不能在预处理器条件下使用 sizeof ?
我知道 sizeof 是一个运算符,它在编译时评估为整数常量。 但它似乎不能在 #if 预处理器指令中使用,例如:
#if 4 == sizeof(int)
typedef int Int32;
#endif
(cygwin-gcc 3.4.4 以及 Visual C++ 6.0 报告编译错误)
为什么不允许这样的用法?
I understand that sizeof is an operator, which is evaluated at compile time to an integer constant.
But it seem it can not be used in the #if preprocessor directive like:
#if 4 == sizeof(int)
typedef int Int32;
#endif
(cygwin-gcc 3.4.4 as well as Visual C++ 6.0 report compile errors)
Why is such usage not allowed?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为
sizeof
是在编译时评估的,而指令是在编译之前评估的,而执行此操作的部分不是编译器,因此它不会理解sizeof 是什么
的意思。Because
sizeof
is evaluated at compilation time while directives are evaluated before compilation, and the part that does that is not the compiler, so it won't understand whatsizeof
means.sizeof 是一个 C 运算符。您不能在预处理器指令中使用 C 代码。预处理器指令在编译之前进行评估。
The sizeof is a C operator. You can't use C code in preprocessor directives. Preprocessor directives are evaluated before the compilation takes place.