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