「C言語/記法」の版間の差分

削除された内容 追加された内容
→‎区切り子: 表の作成
脚注の位置などを修正
46 行
??- ~
</pre>
3文字表記がソースファイルの中にある場合、その3つの文字の並びを同じ行の右側の対応する1文字に置き換える。
これら以外の3文字表記は、存在しない。
上に掲げた3文字表記の始まりとならない?は、置き換えない。
3文字表記は、7ビットUS ASCII符号集合の部分集合であるISO/IEC646で規定する普遍符号集合に定義がない文字の入力を可能にする。
<ref>『JISX3010:2003』p.13「5.2.1.1 3文字表記」</ref>
 
3文字表記に一致する文字列を表記したい場合、「?」の代わりに逆斜線表記(エスケープシーケンス)の「\?」を用いるとよい。
55 ⟶ 59行目:
 
== 字句 ==
字句とはC言語の最小の字句的な単位である。
字句には、キーワード、識別子、国際文字名、定数、文字列リテラル、区切り子、ヘッダ名、前処理数、注釈などがある。
<ref>『JISX3010:2003』p.35「6.4 字句要素」</ref>
 
=== キーワード ===
90 ⟶ 96行目:
 
=== 識別子 ===
識別子とは、1つ又はそれ以上の実体を指し示すもので、<ref name="識別子">『JISX3010:2003』p.37「6.4.2 識別子」</ref>
オブジェクト、関数、構造体・共用体・列挙体のタグまたはメンバ、型定義名、ラベル名、マクロ名、マクロ仮引数のいずれか一つを表す。<ref>『JISX3010:2003』p.21「6.2.1 識別子の有効範囲」</ref>
 
識別子は、半角英数、「_(下線)」からなる文字列である。
ただし、先頭は非数字でなければならない。
識別子に多バイト文字を使用できるかはコンパイラによる。<ref>『JISX3010:2003』p.37「6.4.2 name="識別子」<"/ref>
 
==== __func__ ====
116 ⟶ 125行目:
</source>
nは16進数字。国際文字名は、次に示す短い識別子を持つ文字を指定してはならない。
00A0未満[0024($)0040(@)及び0060(`)を除く]、D800~DF00。
国際文字名は、基本文字集合にない文字を表すために、識別子、文字定数、及び文字列リテラルの中で使用できる。
国際文字名\Unnnnnnnnは8桁の短い識別子がnnnnnnnnである文字を表す。
国際文字名\unnnnは4桁の短い識別子がnnnnである文字を表す(この文字の8桁の短い識別子は、0000nnnnである。)。
国際文字名の識別子はISO/IEC 10646で規定されている。
<ref>『JISX3010:2003』p.39「6.4.3 国際文字名」</ref>
 
=== 定数 ===
定数とはプログラム実行時に一定の値しかもたない数である。
変数の値がプログラム実行中に変更される場合もあるのに対して、定数の値はプログラム実行中を通して一定である。
ソースコード中で直接に記述された定数を特にリテラルとも呼ぶ。ここではそのリテラルについて説明する。
 
【下の表を参照しつつ読むこと】定数には整数定数、浮動小数点定数、列挙定数、文字定数、文字列定数、などがある。
整数定数とは整数を記述するための定数である。主に10進数表記が使われるが、必要に応じて8進数表記や16進数表記が使われることもある。8進数表記では接頭辞として0を付け、<ref>『知ってた?8進数のナゾ:Alternative 笑門来福:ITmedia オルタナティブ・ブログ』http://blogs.itmedia.co.jp/pina/2006/06/8_bf7b.html</ref>16進数表記では接頭辞として0xを付ける。
浮動小数点定数とは浮動小数点数を記述するための定数である。主に10進数の小数点数表記で記述するが、必要に応じて有効数字部と指数部で記述することもある。
列挙定数についてはここでは説明しない。詳細は[[C言語/高度なデータ型と変数#列挙体enum]]を参照せよ。
文字定数とは1バイト文字を記述するための定数である。半角英数記号や半角カタカナなどが記述できる。
文字列定数(文字列リテラル)とは1バイト文字または多バイト文字の文字列を記述するための定数である。C言語では文字列は文字の配列として扱われるが、ここではこれ以上説明しない。詳細は[[C言語/文字と文字列]]を参照せよ
 
*次に主な定数を表にまとめた。
146 ⟶ 163行目:
|-
|}
<ref>『JISX3010:2003』p.39「6.4.4 定数」</ref><ref>『JISX3010:2003』p.45「6.4.5 文字列リテラル」</ref>
<ref>『JISX3010:2003』p.45「6.4.5 文字列リテラル」</ref>
<ref>『知ってた?8進数のナゾ:Alternative 笑門来福:ITmedia オルタナティブ・ブログ』http://blogs.itmedia.co.jp/pina/2006/06/8_bf7b.html</ref>
 
*整数定数の接尾語
190 ⟶ 205行目:
}
</source>
 
=== 列挙定数 ===
列挙定数については[[C言語/高度なデータ型#列挙体]]を参照せよ。
 
=== 区切り子 ===
218 ⟶ 230行目:
|-
|}
区切り子とは、独立した構文的及び意味的な機能を持つ記号である。
何らかの操作を行うとき、それを演算子と呼ぶ。また演算子が操作を行う対象をオペランドと呼ぶ。
<ref name="区切り子">『JISX3010:2003』p.46「6.4.6 区切り子」</ref>
 
次の6つの2文字の字句は、2文字表記と呼ばれる。
228 ⟶ 242行目:
[ ] { } # ##
</pre>
<ref>『JISX3010:2003』p.46「6.4.6 name="区切り子」<"/ref>
 
=== ヘッダ名 ===
236 ⟶ 250行目:
"文字列"
</pre>
ヘッダ名とは、#include前処理指令で読み込まれるファイル名を指す。
ヘッダ名には「'、\、"、//、/*」は指定できない。
<ref>『JISX3010:2003』p.46「6.4.7 ヘッダ名」</ref>
 
&#x23;include前処理指令については、[[C言語/前処理指令#ソースファイル取り込み]]を参照せよ。
 
=== 前処理数 ===
前処理数の記述は次のようになっている。
前処理数の記述は次のようになっている。なお、ここでは『JISX3010:2003』の構文規則をそのまま引用している。<ref>『JISX3010:2003』p.21「6.1 記法」</ref>
 
構文規則<ref>『JISX3010:2003』p.4521「6.4.51 文字列リテラル記法」</ref>
 
前処理数の記述は次のようになっている。なお、ここでは『JISX3010:2003』の構文規則をそのまま引用している。<ref>『JISX3010:2003』p.21「6.1 記法」</ref>
 
構文規則
<pre>
前処理数
258 ⟶ 273行目:
前処理数 .
</pre>
前処理数は、省略可能なピリオド(.)をもつ数字で始まる。
その後ろに正しい識別子用文字及び文字の並びe+、e-、E+、E-、p+、p-、P+、P-が続いてもよい。
前処理数字句は、字句的に全ての浮動小数点定数字句及び整数定数字句を含む。
<ref>『JISX3010:2003』p.47「6.4.8 前処理数」</ref>
 
前処理数とは、整数か浮動小数点数かを区別するまえの大雑把な解析によって得られた字句のこと。<ref>『第10回 翻訳フェーズ | 株式会社きじねこ』http://www.kijineko.co.jp/tech/creintro/translation-phases.html</ref>
268 ⟶ 286行目:
/*注釈の例2*/
</source>
注釈とはプログラマの覚え書きとしての単なるメモで、プログラムの処理とは一切関係はない。
他人の書いたコードや自分が昔書いたコードを注釈なしに理解することは困難であるため、適度な注釈はコードの理解を高めます。
 
C言語では2種類の注釈表記方法があり、「//」から行の終わりまで、または「/*」と「*/」とで囲まれた文章が注釈である。<ref>『JISX3010:2003』p.48「6.4.9 注釈」</ref>
275 ⟶ 294行目:
 
== 文 ==
文の記述は次のようになっている。
<source lang=c>
/*いくつかの字句*/;//「;(セミコロン)」で終わる
</source>
文とは実行すべき動作を記述したものであり、空白類(空白、水平タブ、改行、垂直タブ、書式送り)で分けられたいくつかの字句からなり、「;(セミコロン)」で終わる。
文は基本的に上から下へ順番に実行される。<ref name="文及びブロック">『JISX3010:2003』p.99「6.8 文及びブロック」</ref>
 
== ブロック ==
ブロックの記述は次のようになっている。
<source lang=c>
{//ブロックの始まり
289 ⟶ 311行目:
}//ブロックの終わり
</source>
ブロックとはいくつかの文を1つの構造的な単位にまとめたものである。<ref>『JISX3010:2003』p.99「6.8 name="文及びブロック」<"/ref>
 
== 脚注 ==