问题描述
通常不希望出现,但有时不可避免地发出#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