我有一个C ++预处理器指令,如下所示:
#if (SOME_NUMBER != 999999999999999)
// do stuff
#endif
999999999999999显然大于2 32 ,因此该值不适合32位整数。预处理器是否会正确使用64位整数来解析比较,还是会截断一个或两个值?
答案 0 :(得分:2)
尝试使用LL后缀:
#if (SOME_NUMBER != 999999999999999LL)
// do stuff
#endif
在我的gcc中这项工作很好:
#include <iostream>
#define SOME_NUMBER 999999999999999LL
int main()
{
#if (SOME_NUMBER != 999999999999999LL)
std::cout << "yes\n";
#endif
return 0;
}
有或没有LL后缀。
答案 1 :(得分:1)
您可以尝试使用“limits.h”中定义的UINT_MAX
常量:
#if (SOME_NUMBER != UINT_MAX)
// do stuff
#endif
UINT_MAX
值取决于整数大小。
答案 2 :(得分:1)
预处理器算法作为常规常量表达式(参见标准,16.1 / 4),但int
和unsigned int
被视为long
和unsigned long
。因此,如果您有64位类型,则可以正常使用它。