C ++预处理程序指令限制

时间:2011-02-03 18:22:43

标签: c++ c-preprocessor

我有一个C ++预处理器指令,如下所示:

#if (SOME_NUMBER != 999999999999999)
// do stuff
#endif

999999999999999显然大于2 32 ,因此该值不适合32位整数。预处理器是否会正确使用64位整数来解析比较,还是会截断一个或两个值?

3 个答案:

答案 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),但intunsigned int被视为longunsigned long 。因此,如果您有64位类型,则可以正常使用它。