C++ 用于向无符号长文字追加后缀的宏
我正在使用一个定义如下常数的库:C++ 用于向无符号长文字追加后缀的宏,c++,macros,C++,Macros,我正在使用一个定义如下常数的库: #define SOME_BIG_CONSTANT 0x0000000100000000 ULL_(SOME_BIG_CONSTANT) 该文本太大,无法表示为long,因此任何使用该宏的程序都无法编译(VxWorks使用gcc 4.1.2)。有效的(非标准,但此编译器支持)解决方案是在文本中添加后缀ull: #define SOME_BIG_CONSTANT 0x0000000100000000ull 但是,这需要我修改库标题,我不希望这样做。我不擅长宏
#define SOME_BIG_CONSTANT 0x0000000100000000
ULL_(SOME_BIG_CONSTANT)
该文本太大,无法表示为long
,因此任何使用该宏的程序都无法编译(VxWorks使用gcc 4.1.2)。有效的(非标准,但此编译器支持)解决方案是在文本中添加后缀ull
:
#define SOME_BIG_CONSTANT 0x0000000100000000ull
但是,这需要我修改库标题,我不希望这样做。我不擅长宏,所以我的问题是,如何定义一个可以添加后缀的宏,我可以这样称呼它:
#define SOME_BIG_CONSTANT 0x0000000100000000
ULL_(SOME_BIG_CONSTANT)
这将扩展到:
0x0000000100000000ull
ull是C++11上的标准后缀 另一方面,您可以定义以下宏:
#define APPEND(x, y) x ## y
#define ULL(x) APPEND(x, ull)
现在,您可以使用:
int main()
{
unsigned long long a = ULL(SOME_BIG_CONSTANT);
return 0;
}
我应该做这项工作。(注:未经测试)
第二个宏需要在传递的宏上触发宏展开。当使用
ull
后缀时,它不应该是无符号长a
?