C言語なら俺に聞け(入門編)Part 115 #5

5名無しさん@Next2ch:2015/03/18(水) 12:51:16.33 ID:SMi9Fbq0

>>4
訂正

(3)
関数形式マクロの実引数を識別した後,実引数置換を行う。実引数の中に含まれるす
べてのマクロの展開後,置換要素並びの中の仮引数を対応する実引数で置き換える。
ただし,次の仮引数は除く
- #前処理字句又は##前処理字句が前にある仮引数
- ##前処理字句が後に続く仮引数
-> 実引数Sはマクロ展開されない

(4)
置換要素並びの中で,仮引数の直前に#前処理字句がある場合,対応する実引数の前
処理字句列のつづりを含んだ一つの単純文字列リテラル前処理字句によって,#前
処理字句と仮引数を置き換える。
-> "S"に展開される。

STR(S)を"hoge"に展開するにはどうすれば良いか?
#define STR_(x) #x
#define STR(x) STR_(x)
#define S hoge
STR(S)
と二段階にすれば良い。

どのように展開されるか、追跡しよう。(2)までは同じだ。
(3)'
-> 実引数Sがhogeに展開され、STR(S)はSTR_(hoge)に置き換えられる。

(5)
置換要素並び中のすべての仮引数を置き換え、更に#演算子及び##演算子の処理を
行った後,すべてのプレースマーカー前処理字句を削除する。その後,更に置き換
えるべきマクロ名があるかどうかを調べるために,ソースファイル上のその後のす
べての前処理字句と共にその結果の前処理字句を再走査する。
-> STR_(hoge)を再置き換えする (以下説明略)


スパムを通報

このレスがスパム・荒らしである場合は以下のボタンをクリックして通報してください。
(同意できない意見などに反対票を投じる機能ではありません)
通報

このスレッドを全て表示


レスを書き込む