C++预处理器指令限制
我有一个类似这样的 C++ 预处理器指令:
#if (SOME_NUMBER != 999999999999999)
// do stuff
#endif
999999999999999 显然大于 232,因此该值不适合 32 位整数。预处理器会正确使用 64 位整数来解析比较,还是会截断其中一个或两个值?
I have a C++ pre-processor directive that is something like this:
#if (SOME_NUMBER != 999999999999999)
// do stuff
#endif
999999999999999 is obviously greater than 232, so the value won't fit into a 32-bit integer. Will the preprocessor correctly use a 64-bit integer to resolve the comparison, or will it truncate one or both of the values?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
尝试使用 LL 后缀:
在我的 gcc 中,这工作正常:
带或不带 LL 后缀。
Try to use the LL suffix:
In my gcc this work fine:
With or without the LL suffix.
您可以尝试使用“limits.h”中定义的
UINT_MAX
常量:UINT_MAX
值根据整数大小而变化。You can try using the
UINT_MAX
constant defined in "limits.h":UINT_MAX
value varies depending on the integer size.预处理器算术与普通常量表达式一样工作(请参阅标准,16.1/4),除了
int
和unsigned int
被视为long
> 和unsigned long
。因此,如果您有 64 位类型,则可以正常使用。Preprocessor arithmetic works as normal constant expressions (see the Standard, 16.1/4), except that
int
andunsigned int
are treated as if they werelong
andunsigned long
. Therefore, if you have a 64-bit type, you can use it as normal.