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

#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;
}

10-05 22:08