我正在使用定义如下常量的库:
#define SOME_BIG_CONSTANT 0x0000000100000000
该文字太大,无法用
long
表示,因此任何使用此宏的程序均无法编译(对于VxWorks使用gcc 4.1.2)。起作用的(非标准的,但受此编译器支持的)解决方案是在字面上添加后缀ull
:#define SOME_BIG_CONSTANT 0x0000000100000000ull
但是,这将需要我修改库标题,而我不希望这样做。我很喜欢宏,所以我的问题是,如何定义一个可以添加后缀的宏,我可以这样称呼它:
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;
}