を追加します。文字列化マクロは常に2つの単語の文字列化された文字列を出力し、次のコードを考えると、単一のスペース文字
#define PORT_INFO_MAC_2(portNum) port: portNum
#define PORT_INFO_MAC(portNum) PORT_INFO_MAC_2(portNum)
/* Stringify macro expansion instead of the macro itself */
#define INVOKE_MACRO(...) #__VA_ARGS__
printf(" %s " , INVOKE_MACRO(PORT_INFO_MAC(1))); /* In a more general way, I'll be using it like follows: INVOKE_MACRO(PORT_INFO_MAC(2), PORT_INFO_MAC(1), ...) */
出力は常に"port"
と"1"
の間に単一のスペースと" port: 1 "
です。なぜそこに1つのスペースがあり、スペースの量を制御する方法があるのですか?
PORT_INFO_MAC_2
マクロのスペース量をport
とportNum
の間で変更しても、出力スペースは変更されません。 2例があるようです
EDIT
、拳のケースでport
とportNum
は、それらの間の出力に存在する、その後スペースなしclosest- PORT_INFO_MAC_2(portNum) port:portNum
です。 2番目のケースでは、それらの間にマクロ内にスペースがいくつも存在する場合、出力のスペースは常に1です。 正式な説明はありますか?それ以上のコントロールはありますか?
注: "spacebar"は_space_文字を生成するキーボードの大きなボタンです。 – Olaf