为什么我不能在预处理器条件下使用 sizeof ?

发布于 2024-08-08 15:11:16 字数 215 浏览 5 评论 0原文

我知道 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

书间行客 2024-08-15 15:11:16

因为 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 what sizeof means.

半世蒼涼 2024-08-15 15:11:16

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文