質問: ### 前提 C言語の分割コンパイルに関して#ifndef~#endifについて調べていたところ、これはプリプロセッサ命令であるという説明と、擬似命令であるという説明が出てきました。両者を同一視している記事もあるのですが、どうも腑に落ちません。 擬似命令のうち、プリプロセスを実行するものがプリプロセッサ命令であると私には思われました。 ### 質問 質問は次の2点です。 ・擬似命令とプリプロセッサ命令は同じものか? ・違うとすれば、プリプロセッサ命令は擬似命令に含まれるという認識で良いのか? C言語やアセンブリ言語などの文脈によって違うのかもしれませんが、特にC言語においてはどうなのか知りたいです。 よろしくお願いします。
回答: こんにちは。 プリプロセッサ命令を疑似命令とはあまり呼ばない気がします。 しかし、ググったら確かにそのような表現をしている人もいますね。 私が知る限りでは、orgやequ等のアセンブラへの命令を疑似命令と呼びます。マシン語に落とされない命令という意味で疑似です。 ということは、コンパイラ自体への命令を疑似命令と呼んでいる人たちがいるのかも知れません。 プリプロセッサへの指令は、マシン語に直接には落ちませんのでその意味では妥当ですね。 しかし、マシン語に落ちない記述は構造体の定義や`void foo();`などの前方参照等他におm多数あります。ですので、わざわざプリプロセッサ命令のみを「疑似命令」と呼ぶ意味はないように感じます。 普通にプリプロセッサ指令で良いのでは? > > 擬似命令のうち、プリプロセスを実行するものがプリプロセッサ命令であると私には思われました。 > > > その解釈は間違ってないと思います。 > > ・擬似命令とプリプロセッサ命令は同じものか? > > ・違うとすれば、プリプロセッサ命令は擬似命令に含まれるという認識で良いのか? > > > 「擬似命令」という用語を使っている人次第でしょう。 「プリプロセッサ命令(指令と呼ぶことが多いようです)」は標準規格書で定義されています。 6.10 Preprocessing directivesです。(N1570を見ています。) 「疑似命令」は標準規格書では定義されていないと思いますし、他に普遍的な定義はないと思います。従って、使っている人次第です。