「C言語/前処理指令」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
{{Nav}}
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
s/source/syntaxhighlight/
タグ: 2017年版ソースエディター
112 行
</pre>は、識別子がマクロ名として現在定義されているかどうかをチェックする。これらの条件は、それぞれ''' #if defined identifier''' および '''#if !defined identifier''' と同じです。
: 各ディレクティブの条件は、順にチェックされます。入れ子になっている条件式のレベルを把握するために、指令は指令を決定する名前のみで処理され、残りの指令の前処理トークンは無視され、グループ内の他の前処理トークンも無視されます。制御条件が真(0以外)と評価された最初のグループだけが処理され、それ以降のグループはスキップされ、その制御指令はスキップされたグループに含まれているかのように処理されます。どの条件も真と評価されず、'''#else''' ディレクティブがある場合は、'''#else''' で制御されるグループが処理されます。'''#else''' ディレクティブがない場合は、'''#endif''' までのすべてのグループがスキップされます。
:例<sourcesyntaxhighlight lang=c>
/* Fallback for compilers not yet implementing this feature. */
#ifndef __has_c_attribute
127 行
/* Fallback implementation. */
#define F
</syntaxhighlight>
</source>
前方参照:マクロの置換(6.10.3)、ソースファイルのインクルード(6.10.2)、最大の整数型
 
158 行
# include ''pp-tokens'' ''new-line''
</pre>(前の2つの形式のいずれとも一致しないもの)が許可されます。ディレクティブの行の後の前処理トークンは、通常のテキストと同様に処理されます(現在マクロ名として定義されている各識別子は、その前処理トークンの置換リストで置換されます)。すべての置き換えの後に生じる指令は、前の2つの形式のうちの1つと一致しなければならず、その後、適切に処理されます。
:;EXAMPLE 1 #include 前処理ディレクティブの最も一般的な使い方は以下の通りです。:<sourcesyntaxhighlight lang=c>
#include <stdio.h>
#include "myprog.h"
</syntaxhighlight>
</source>
:;EXAMPLE 2 マクロで置換された#includeディレクティブの例です。:<sourcesyntaxhighlight lang=c>
#if VERSION == 1
#define INCFILE "vers1.h"
171 行
#endif
#include INCFILE
</syntaxhighlight>
</source>
前方参照:マクロの置き換え(6.10.3)
 
536 行
</syntaxhighlight>
 
{{Nav}}
== 脚註 ==
<references/>