我正在使用一个定义如下常量的库:
#define SOME_BIG_CONSTANT 0x0000000100000000
Run Code Online (Sandbox Code Playgroud)
这个文字太大而无法表示long,因此任何使用该宏的程序都无法编译(使用gcc 4.1.2 for VxWorks).(非标准,但由此编译器支持)解决方案可以将后缀添加ull到文字中:
#define SOME_BIG_CONSTANT 0x0000000100000000ull
Run Code Online (Sandbox Code Playgroud)
但是,这需要我修改库标题,我宁愿不这样做.我吮吸宏,所以我的问题是,如何定义一个可以添加该后缀的宏,我可以像这样调用:
ULL_(SOME_BIG_CONSTANT)
Run Code Online (Sandbox Code Playgroud)
哪个会扩展到:
0x0000000100000000ull
Run Code Online (Sandbox Code Playgroud)
ull是C++ 11的标准后缀.
另一方面,您可以定义以下宏:
#define APPEND(x, y) x ## y
#define ULL(x) APPEND(x, ull)
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用:
int main()
{
unsigned long long a = ULL(SOME_BIG_CONSTANT);
return 0;
}
Run Code Online (Sandbox Code Playgroud)