用于将后缀追加到无符号长文本的宏

Macro for appending suffix to unsigned long long literal

本文关键字:文本 无符号 后缀 追加 用于      更新时间:2023-10-16

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

#define SOME_BIG_CONSTANT 0x0000000100000000

这个文字太大而无法表示为long,所以任何使用此宏的程序都无法编译(使用 gcc 4.1.2 for VxWorks(。有效的(非标准,但受此编译器支持(解决方案是将后缀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;
} 
#define ULL_2(NUM) NUM ## ull
#define ULL_(NUM) ULL_2(NUM)

应该做这项工作。(注:未经测试(

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