用于将后缀附加到unsigned long long literal的宏

Bjö*_*lex 4 c++ macros

我正在使用一个定义如下常量的库:

#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)

J. *_*eja 8

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)