发出参数化的_Pragma语句?

问题描述

通常不希望出现,但有时不可避免地发出#pragma指令来抑制和恢复警告。某些编译器支持_Pragma作为一种从宏表达式内部控制诊断的方法

How to concatenate strings in the arguments of _Pragma讨论了如何将单个字符串粘贴到_Pragma语句中。

有什么方法可以对此进行参数化?我想将两个_Pragma指令合并在一个宏后面,但这需要将标记粘贴到_Pragma语句中:

#define DO_A_THING(SOME_FLOAT) \
  do { \
    disABLE_COMPILER_WARNING(double-promotion) \
    call_variadic_function("blah",SOME_FLOAT) \
    RESTORE_COMPILER_WARNING() \
  } while(0)

disABLE_COMPILER_WARNING会扩展为以下内容

    _Pragma("GCC diagnostic push") \
    _Pragma("GCC diagnostic ignored \"-Wdouble-promotion\"")

RESTORE_COMPILER_WARNING将扩展为类似内容

    _Pragma("GCC diagnostic pop")

是否可以编写disABLE_COMPILER_WARNING使其扩展成书面形式?

解决方法

作品:

type        assets  rateOfReturn    assetClassName  assetAmount
portfolio   600000  6.3             Bonds           100000
portfolio   600000  6.3             Equities        500000