我正在使用一个定义如下常量的库:
#define SOME_BIG_CONSTANT 0x0000000100000000
此文字太大而无法表示为long
,因此任何使用此宏的程序都无法编译(使用gcc 4.1.2 for VxWorks)。 (非标准,但由此编译器支持)解决方案可以将后缀ull
添加到文字中:
#define SOME_BIG_CONSTANT 0x0000000100000000ull
但是,这需要我修改库标题,我宁愿不这样做。我吮吸宏,所以我的问题是,如何定义一个可以添加该后缀的宏,我可以像这样调用:
ULL_(SOME_BIG_CONSTANT)
哪个会扩展为:
0x0000000100000000ull
答案 0 :(得分:8)
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;
}
答案 1 :(得分:3)
#define ULL_2(NUM) NUM ## ull
#define ULL_(NUM) ULL_2(NUM)
应该做的工作。 (注意:未经测试)
需要第二个宏来触发传递宏的宏扩展。