【问题标题】:Macro for appending suffix to unsigned long long literal用于将后缀附加到 unsigned long long 文字的宏
【发布时间】:2011-12-22 13:31:47
【问题描述】:

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

#define SOME_BIG_CONSTANT 0x0000000100000000

这个字面量太大而不能表示为long,所以任何使用这个宏的程序都无法编译(使用gcc 4.1.2 for VxWorks)。可行的(非标准,但受此编译器支持)解决方案是将后缀 ull 添加到文字中:

#define SOME_BIG_CONSTANT 0x0000000100000000ull

但是,这需要我修改库头文件,而我不想这样做。我很讨厌宏,所以我的问题是,如何定义一个可以添加该后缀的宏,我可以这样称呼它:

ULL_(SOME_BIG_CONSTANT)

这将扩展为:

0x0000000100000000ull

【问题讨论】:

    标签: c++ macros


    【解决方案1】:

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

    【讨论】:

    • 不应该是unsigned long long a,使用ull后缀吗?
    【解决方案2】:
    #define ULL_2(NUM) NUM ## ull
    #define ULL_(NUM) ULL_2(NUM)
    

    应该做的工作。 (注:未经测试)

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

    【讨论】:

      猜你喜欢
      • 2016-07-29
      • 1970-01-01
      • 2013-05-04
      • 2023-03-22
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      相关资源
      最近更新 更多