「C言語/記法」の版間の差分
削除された内容 追加された内容
→3文字表記: C99とC11の差異 タグ: 2017年版ソースエディター |
cleanup、s/文字列定数/文字列リテラル/、JISCの参照先が間違っていて偽出典化していたのを修正。 タグ: 2017年版ソースエディター |
||
1 行
このページでは、C言語の記法に関する情報を網羅するよう心掛けました
== 文字集合 ==
121 ⟶ 120行目:
== 字句 ==
字句とはC言語の最小の字句的な単位である。
字句には、キーワード、識別子、国際文字名、定数、文字列リテラル、区切り子、ヘッダ名、前処理数、注釈などがある<ref>『JISX3010:2003』p.35「6.4 字句要素」</ref>。
=== キーワード ===
134 ⟶ 132行目:
=== 識別子 ===
識別子とは、1つ又はそれ以上の実体を指し示すもので、<ref name="識別子">『JISX3010:2003』p.37「6.4.2 識別子」</ref>
オブジェクト、関数、構造体・共用体・列挙体のタグまたはメンバ、型定義名、ラベル名、マクロ名、マクロ仮引数のいずれか一つを表す
識別子は、半角英数、「_(下線)」からなる文字列である。
ただし、先頭は非数字でなければならない。
識別子に多バイト文字を使用できるかはコンパイラによる
==== __func__ ====
162 ⟶ 160行目:
=== 国際文字名 ===
ISO/IEC 9899:2011(通称 C11)の §6.4.3 ''Universal character names''(JIS Cでは国際文字名と和訳) の冒頭を抄訳/引用します<ref name="jtc1-sc22-wg14-n1570-6.4.3">{{cite book
| url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
| title = C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x
| page=61, §6.4.3 ''Universal character names''
| publisher = ISO/IEC}}</ref>。
<blockquote class="toccolours" cite="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf">
; 構文
:: <
universal-character-name:
\u hex-quad
\U hex-quad hex-quad
hex-quad:
hexadecimal-digit hexadecimal-digit
hexadecimal-digit hexadecimal-digit
</syntaxhighlight>
国際文字名\Unnnnnnnnは8桁の短い識別子がnnnnnnnnである文字を表す。▼
; 制約条件
: 国際文字名では、短識別子が00A0未満で、0024($)、0040(@)、0060(')以外の文字、およびD800からDFFFの範囲の文字を指定してはならない。
; 説明
: 国際文字名は、識別子、文字定数、文字列リテラルでは、基本文字セットに含まれない文字を指定するために使用することができる。
; セマンティクス
: 国際文字名 \Unnnnnnnn は、ISO/IEC 10646(訳註: UCS; Universal Coded Character Set)で規定されている8桁の短縮識別子が nnnnnnn である文字を表す。
</blockquote>
;[https://paiza.io/projects/GJNv87B2Zcweu1F-jZKiuQ?language=c 国際文字名の使用]
:<syntaxhighlight lang=c>
#include <stdio.h>
int main(void)
{
printf("\u265E\n"); // '♞'; BLACK CHESS KNIGHT
}
</syntaxhighlight>
; 結果
: <syntaxhighlight lang=text>
♞
</syntaxhighlight>
=== 定数 ===
定数とはプログラム実行時に一定の値しかもたない数である。
変数の値がプログラム実行中に変更される場合もあるのに対して、定数の値はプログラム実行中を通して一定である。
ソースコード中で直接に記述された定数を特にリテラルとも呼ぶ<ref>const修飾子で修飾された複合オブジェクトの事も、複合リテラルと呼ぶ</ref>。ここではそのリテラルについて説明する。
整数定数とは整数を記述するための定数である。主に10進数表記が使われるが、必要に応じて2進数表記や8進数表記や16進数表記が使われることもある。8進数表記では接頭辞として0bあるいは0Bを付け、8進数表記では接頭辞として0を付け、<ref>『知ってた?8進数のナゾ:Alternative 笑門来福:ITmedia オルタナティブ・ブログ』http://blogs.itmedia.co.jp/pina/2006/06/8_bf7b.html</ref>16進数表記では接頭辞として0xあるいは0Xを付ける。
浮動小数点定数とは浮動小数点数を記述するための定数である。主に10進数の小数点数表記で記述するが、必要に応じて有効数字部と指数部で記述することもある。
列挙定数についてはここでは説明しない。詳細は[[C言語/データ型と変数#enum]]を参照せよ。
文字定数とは
ワイド文字列リテラル(wide string literal)は,文字Lという接頭語をもつことを除いて,単純文字列リテラルと同一である。
C言語では文字列は(NULL文字で終端された)文字の配列として扱われるが、ここではこれ以上説明しない。詳細は[[C言語/文字と文字列]]を参照せよ。
*次に主な定数を表にまとめた。
{|class="wikitable"
|+ 定数の種類と記法
!定数の種類!!進数!!記法!!例
|-
|rowspan="
| url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf
| title= N2596 working draft — December 11, 2020 ISO/IEC 9899:202x (E)
| page=51, §6.4.4.1 Integer constants
| publisher = [http://www.open-std.org/jtc1/sc22/wg14/www/projects ISO/IEC JTC1/SC22/WG14]}}</ref>||0b10011010010 // 10進数で1234のこと
|-
<!--||-->|8進数||「0」に続く8進数<ref>『JISX3010:2003』p.39「6.4.4 定数」</ref>||02322 // 10進数で1234のこと
|-
<!--||-->|10進数||10進数||1234
|-
<!--||-->|16進数||「0x」あるいは「0X」に続く16進数||0x4d2 // 10進数で1234のこと
|-
|rowspan="2"|浮動小数点定数||10進数||10進整数部と「.」と10進小数部<br>10進有効数字部と「e」と10進指数部(10のべき乗)|| 3.14<br>1e-3 // 0.001のこと
|-
<!--||-->|16進数||「0x」あるいは「0X」に続く16進整数部と「.」と16進小数部と「p」と10進指数部(2のべき乗)<
|-
|文字定数|| - ||「'(一重引用符)」で囲まれた文字(単純文字定数)<
|-
|文字列
|-
|}
*整数定数の接尾語
231 ⟶ 262行目:
*浮動小数点定数の接尾語
浮動小数点定数に接尾語を付けることで、その型を指定することができる。
浮動小数点定数の型は、接尾語なしで型double、接尾語f又はFで型float、l又はLで型long doubleである<ref>『JISX3010:2003』p.41「6.4.4.2 浮動小数点定数」</ref>。
<syntaxhighlight lang=c>
247 ⟶ 277行目:
c='a';//cに文字定数aを代入する。
char str[32];
strcpy(str,"Hello, World!");//strに文字列
}
</syntaxhighlight>
302 ⟶ 332行目:
=== 前処理数 ===
前処理数(Preprocessing numbers; '''''Syntax'''''では ''pp-number''<ref>JIS Cでは、用語を構文規約中のシンボルに同じ語を使っているので、C99の原文を当たらないと構文について読み誤る恐れがある。</ref>)の記述は次のようになっている。
構文規則
<pre>
前処理数
数字
. 数字
前処理数 数字
前処理数 識別子用非数字
318 ⟶ 349行目:
前処理数 .
</pre>
; 補足説明
: 前処理数は
: その後ろに正しい識別子用文字及び文字の並びe+
: 前処理数字句は
; 意味規則
: 前処理数は,型も値ももたない。型と値は,[翻訳フェーズ(7)で]浮動小数点定数字句又は整数定数字句に変換された結果として決まる。
</blockquote>
上記のように前処理数の解析は、後にくる厳格な構文解析を行うわけではなくもっぱら字句解析による。
=== 注釈 ===
注釈(コメント)の記述は次のようになっている。
:<
//注釈の例1
/*注釈の例2*/
</syntaxhighlight>
注釈とはプログラマの覚え書きとしての単なるメモで、プログラムの処理とは一切関係はない。
他人の書いたコードや自分が昔書いたコードを注釈なしに理解することは困難であるため、適度な注釈はコードの理解を高めます。
C言語では2種類の注釈表記方法があり、「//」から行の終わりまで、または「/*」と「*/」とで囲まれた文章が注釈である
なお、
== 文 ==
文の記述は次のようになっている。
:<
/*いくつかの字句*/;//「;(セミコロン)」で終わる
</syntaxhighlight>
文とは実行すべき動作を記述したものであり、空白類(空白、水平タブ、改行、垂直タブ、書式送り)で分けられたいくつかの字句からなり、「;(セミコロン)」で終わる。
文は基本的に上から下へ順番に実行される
== ブロック ==
ブロックの記述は次のようになっている。
:<
{//ブロックの始まり
//文
355 ⟶ 388行目:
//...
}//ブロックの終わり
</syntaxhighlight>
ブロックとはいくつかの文を1つの構造的な単位にまとめたものである
== 脚注 ==
362 ⟶ 395行目:
== 参考文献 ==
*日本工業標準調査会(当時、現:日本産業標準調査会)『
[[Category:C言語|きほう]]
|