用于将后缀添加到unsigned long long字面量的宏

6

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

#define SOME_BIG_CONSTANT 0x0000000100000000

这个字面量太大了,无法用long表示,所以使用这个宏的任何程序都无法编译(使用gcc 4.1.2 for VxWorks)。解决方法是在字面量后添加后缀ull,虽然这种方式不标准,但该编译器支持。

#define SOME_BIG_CONSTANT 0x0000000100000000ull

然而,这需要我修改库头文件,我不想这样做。我对宏一窍不通,所以我的问题是,如何定义一个宏来添加后缀,我可以像这样调用它:

ULL_(SOME_BIG_CONSTANT)

这将会扩展为:

0x0000000100000000ull
2个回答

10

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
当使用 ull 后缀时,应该是 unsigned long long a,不是吗? - unwind

4
#define ULL_2(NUM) NUM ## ull
#define ULL_(NUM) ULL_2(NUM)

应该可以胜任。 (注意:未经测试)

需要第二个宏来触发传递的宏的宏展开。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接