プログラムに書き込む字句には次の種類がある:
キーワード (予約語, keywords)
識別子 (Identifiers)
定数 (Constants)
文字列リテラル (String Literals)
区切り子 (Punctuators)
ソースファイルに書き込む文法は, 次の 6 種類に分類できる:
コメント (注釈文, Comments)
プリプロセッサ (前処理, Preprocessors)
宣言 (Declarations)
式 (Expressions)
文 (Statements)
関数の定義 (Function Definitions)
キーワード, 予約語 (Keywords), コンパイラが翻訳作業上予め意味を持つ言葉:
auto break case char const continue
default do double else enum extern
float for goto if inline int
u long register restrict return short signed
sizeof static struct switch typedef union
unsigned void volatile while _Bool _Complex
_Imaginary
識別子 (Identifiers) (大文字, 小文字を区別!!):
a-z A-Z 0-9
定数 (Constants):
[文字定数] [整数定数] [浮動小数点定数] [列挙定数]
文字列リテラル (String Literals):
ダブル・クォーテーションで挟まれた文字列
区切り子 (Punctuators):
/ # < > < > ( ) { } [ ] , . -> + - * ; など
lexical.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h>
int main(void){
const int a = 0;
register int m = 12;
int n = 65;
printf("a is %d; m is %d; n is %d.\n", a, m, n);
return 0;
}
/*
キーワード : int void const register return
識別子 : main a m n printf
文字列リテラル: "a is %d; m is %d; n is %d.\n"
定数 : 0 12 65 文字列リテラル内の各文字
区切り子 : / * # <> () {} = ; ,
*/
|
lexical.c の実行結果は:
[cactus:~/code_c/c_tuts]% ./lexical
a is 0; m is 12; n is 65.
lexical2.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /*
Program: Lexical2.c
Builld It: gcc -Wall -o Lexical2 Lexical2.c
*/ // コメント
#include <stdio.h> // プリプロセッサ (前処理)
int main(void){ // 関数の定義
const int a = 0; // 宣言
register int m = 12; // 宣言
int n = 65; // 宣言
printf("a is %d; m is %d; n is %d.\n", a, m, n); // 文 (式文)
return 0; // 文 (return 文, main 関数の返却)
}
|
[宣言] とは識別子の解釈, 属性を指定するもので, 必ずセミコロンで閉じる:
const int a = 0;
register int m = 12;
int n = 65;
宣言は次から構成されている:
記憶域クラス指定子 (Storage Class Specifiers)
型修飾子 (Type Qualifiers)
型指定子 (Type Specifiers)
宣言子 (Declarators)
初期化子 (Initializers)
識別子
ポインタ宣言子 (Pointer Declarators)
配列宣言子 (Array Declarators)
関数宣言子 (Function Declarators)
派生型(オブジェクト型, 不完全型, 関数型):
オブジェクト型 (object type): オブジェクト (値を提示できる記憶域領域) を完全に記述する型.
不完全型 (incomplete type): そうでないオブジェクトを記述する型. 値を記憶するためのメモリ領域の大きさ, [サイズ]を確定するには不十分な情報をもつオブジェクトを記述する型. 定型的な例は void.
関数型 (function type): 関数を記述する型.