我想为 IBM Metal C Prolog 创建参数化预处理器宏。
最初的未参数化形式是
#pragma prolog(Foo, " #MCPROLG MAIN=(YES,16,132)")
真正的序言更复杂,但为了这个问题,重要的部分是字符串中有值。
#pragma
指令本身不能成为宏的一部分,因此我将其替换为_Pragma
:
_Pragma("prolog(Foo, \" #MCPROLG MAIN=(YES,16,132)\")")
我可以像这样参数化 Foo :
#define STR(...) #__VA_ARGS__
#define PROLOG(function) _Pragma(STR(prolog( function , " #MCPROLG MAIN=(YES,16,132)")))
如何创建参数化值 16 的宏?
看来我需要在预处理器中连接字符串,我尝试了以下方法。都使用这个字符串化宏:
#define STR(...) #__VA_ARGS__
替换为 16 的标记(让我们命名它
size
)不能在字符串本身内,因此它会被替换。#define PROLOG(function, size) _Pragma(STR(prolog( function , "#MCPROLG MAIN=(YES, size ,132)")))
_Pragma 只接受一个字符串,所以我不能像这样细读 C 字符串连接:
#define PROLOG(function, size) _Pragma(STR(prolog( function , " #MCPROLG MAIN=(YES," #size ",132)")))
我不能像这样对 prolog 的整个第二个参数进行字符串化:
#define PROLOG(function, size) _Pragma(STR(prolog( function , STR( #MCPROLG MAIN=(YES, size ,132)))))
因为#MCPROLG
需要保留在字符串中,以便其 # 不被视为字符串化标记。