A 言語構文一覧

この節では,ANSI C規格の構文を引用してC言語の構文についてまとめます。 構文カテゴリはボールド体で,リテラル語または文字はモノスペースの非イタリック体で表します。 構文カテゴリの後のコロンはその構文の定義を示します。 定義が複数ある場合は別の行に表示するか, 「次のいずれか1つ」というように前置きしています。オプションの要素には (opt) を付けています。たとえば,次の行はオプションの式を中括弧で囲んでいます。

   { 式(opt) }

括弧内のセクション番号は,C言語のこの部分を説明している『American National Standard for Information Systems-Programming Language C』(文書番号: X3.159-1989)のセクションを示しています。

A.1.1レキシカル文法

A.1.1.1トークン

トークン: (§3.1)





キーワード
識別子
定数
文字列リテラル
演算子
区切り子

前処理トークン: (§3.1)





ヘッダ名
識別子
前処理数
文字定数
文字列リテラル
演算子
区切り子
上記以外の各非空白文字

A.1.1.2キーワード

キーワード: (§3.1.1)次のいずれか1つ



         auto        double      int         struct
         break       else        long        switch
         case        enum        register    typedef
         char        extern      return      union
         const       float       short       unsigned
         continue    for         signed      void
         default     goto        sizeof      volatile
         do          if          static      while
         _Bool      _Complex (Alpha専用)

A.1.1.3識別子

識別子: (§3.1.2)





非数字識別子
識別子 非数字識別子
識別子 数字

非数字識別子:

非数字
他の処理系定義の文字

非数字: (§3.1.2)次のいずれか1つ



         a  b  c  d  e  f  g  h  i  j  k  l  m
         n  o  p  q  r  s  t  u  v  w  x  y  z
         A  B  C  D  E  F  G  H  I  J  K  L  M
         N  O  P  Q  R  S  T  U  V  W  X  Y  Z  _

数字: (§3.1.2)次のいずれか1つ



         0  1  2  3  4  5  6  7  8  9

A.1.1.4定数

定数: (§3.1.3)





浮動小数点定数
整数定数
列挙定数
文字定数

浮動小数点定数: (§3.1.3.1)




10進浮動小数点定数
16進浮動小数点定数

10進浮動小数点定数:

小数定数 指数部(opt) 浮動小数点接尾語(opt)
数字列 指数部 浮動小数点接尾語 (opt)

16進浮動小数点定数:

16進接頭語 16進小数定数 2進指数部 浮動小数点接尾語(opt)
16進接頭語 16進数字列 2進指数部 浮動小数点接尾語(opt)

小数定数: (§3.1.3.1)





数字列(opt) . 数字列
数字列 .

指数部: (§3.1.3.1)





e 符号(opt) 数字列
E 符号(opt) 数字列

符号: (§3.1.3.1)次のいずれか1つ





+ -

数字列: (§3.1.3.1)





数字
数字列 数字

16進小数定数:

16進数字列(opt) . 16進数字列
16進数字列 .

2進指数部:

p 符号(opt) 数字列
P 符号(opt) 数字列

16進数字列:

16進数字
16進数字列 16進数字

浮動小数点接尾語: (§3.1.3.1)次のいずれか1つ





f l F L

整数定数: (§3.1.3.2)





10進定数 整数接尾語(opt)
8進定数 整数接尾語 (opt)
16進定数 整数接尾語(opt)

10進定数: (§3.1.3.2)





0以外の数字
10進定数 数字

8進定数: (§3.1.3.2)





0
8進定数 8進数字

16進定数: (§3.1.3.2)





0x 16進数字
0X 16進数字
16進定数 16進数字

0以外の数字: (§3.1.3.2)次のいずれか1つ



         1  2  3  4  5  6  7  8  9

8進数字: (§3.1.3.2)次のいずれか1つ



         0  1  2  3  4  5  6  7

16進数字: (§3.1.3.2)次のいずれか1つ



         0  1  2  3  4  5  6  7  8  9
         a  b  c  d  e  f
         A  B  C  D  E  F

整数接尾語: (§3.1.3.2)





符号なし接尾語 長接尾語(opt)
長接尾語 符号なし接尾語(opt)

符号なし接尾語: (§3.1.3.2)次のいずれか1つ





u U

長接尾語: (§3.1.3.2)次のいずれか1つ





l L

列挙定数: (§3.1.3.3)





識別子

文字定数: (§3.1.3.4)





' c文字列 '
L ' c文字列 '

c文字列: (§3.1.3.4)





c文字
c文字列 c文字

c文字: (§3.1.3.4)





エスケープ・シーケンス
次のものを除くソース文字集合の任意のメンバ単一引用符( ' ),バックスラッシュ( \ ),または改行文字

エスケープ・シーケンス: (§3.1.3.4)





単純エスケープ・シーケンス
8進エスケープ・シーケンス
16進エスケープ・シーケンス

単純エスケープ・シーケンス: (§3.1.3.4)次のいずれか1つ



         \'  \"  \?  \\
         \a  \b  \f  \n  \r  \t  \v

8進エスケープ・シーケンス: (§3.1.3.4)





\ 8進数字
\ 8進数字 8進数字
\ 8進数字 8進数字 8進数字

16進エスケープ・シーケンス: (§3.1.3.4)





\x 16進数字
16進エスケープ・シーケンス 16進数字

A.1.1.5文字列リテラル

文字列リテラル: (§3.1.4)





" s文字列(opt) "
L " s文字列(opt) "

s文字列: (§3.1.4)





s文字
s文字列 s文字

s文字: (§3.1.4)





エスケープ・シーケンス
次のものを除くソース文字集合の任意のメンバ二重引用符( " ),バックスラッシュ( \ ),または改行文字

A.1.1.6演算子

演算子: (§3.1.5)次のいずれか1つ



         [  ]  (  )  .  ->
         ++  --  &  *  +  -  ~  !  sizeof
         /  %  <<  >>  <  >  <=  >=  ==  !=  ^  |  &&  ||
         ?  :
         =  *=  /=  %=  +=  -=  <<=  >>=  &=  ^=  |=
         ,  #  ##

A.1.1.7区切り子

区切り子: (§3.1.6)次のいずれか1つ



         [  ]  (  )  {  }  *  ,  :  =  ;  ...  #

A.1.1.8ヘッダ名

ヘッダ名: (§3.1.7)





< h文字列 >
" q文字列 "

h文字列: (§3.1.7)





h文字
h文字列 h文字

h文字: (§3.1.7)





次のものを除くソース文字集合の任意のメンバ改行文字および >

q文字列: (§3.1.7)





q文字
q文字列 q文字

q文字: (§3.1.7)





次のものを除くソース文字集合の任意のメンバ改行文字および "

A.1.1.9前処理数

前処理数: (§3.1.8)





数字
. 数字
前処理数 数字
前処理数 非数字
前処理数 e 符号
前処理数 E 符号
前処理数 .

A.1.2句構造文法

A.1.2.1式

1次式: (§3.3.1)





識別子
定数
文字列リテラル
( )

後置式: (§3.3.2)





1次式
後置式 [ ]
後置式 ( 実引数式並び (opt) )
後置式 . 識別子
後置式 -> 識別子
後置式 ++
後置式 -

実引数式並び: (§3.3.2)





代入式
実引数式並び 代入式

単項式: (§3.3.3)





後置式
++ 単項式
- 単項式
単項演算子 キャスト式
sizeof 単項式
sizeof ( 型名 )

単項演算子: (§3.3.3)次のいずれか1つ



         &  *  +  -  ~  !

キャスト式: (§3.3.4)





単項式
( 型名 ) キャスト式

乗除式: (§3.3.5)





キャスト式
乗除式 * キャスト式
乗除式 / キャスト式
乗除式 % キャスト式

加減式: (§3.3.6)





乗除式
加減式 + 乗除式
加減式 - 乗除式

シフト式: (§3.3.7)





加減式
シフト式 << 加減式
シフト式 >> 加減式

関係式: (§3.3.8)





シフト式
関係式 < シフト式
関係式 > シフト式
関係式 <= シフト式
関係式 >= シフト式

等価式: (§3.3.9)





関係式
等価式 == 関係式
等価式 != 関係式

AND式: (§3.3.10)





等価式
AND & 等価式

排他的OR式: (§3.3.11)





AND
排他的OR AND

包含OR式: (§3.3.12)





排他的OR
包含OR | 排他的 OR

論理AND式: (§3.3.13)





包含OR
論理AND && 包含 OR

論理OR式: (§3.3.14)





論理AND
論理OR | | 論理 AND

条件式: (§3.3.15)





論理OR
論理OR ? : 条件式

代入式: (§3.3.16)





条件式
単項式 代入演算子 代入式

代入演算子: (§3.3.16)次のいずれか1つ



         =  *=  /=  %=  +=  -=  <<=  >>=  &=  ^=  |=

式: (§3.3.17)





代入式
,代入式

定数式: (§3.4)





条件式

A.1.2.2宣言

宣言: (§3.5)





宣言指定子 初期化宣言子並び (opt) ;

宣言指定子: (§3.5)





記憶域クラス指定子 宣言指定子 (opt)
型指定子 宣言指定子(opt)
型修飾子 宣言指定子(opt)

初期化宣言子並び: (§3.5)





初期化宣言子
初期化宣言子並び 初期化宣言子

初期化宣言子: (§3.5)






宣言子
宣言子 = 初期化子

記憶域クラス指定子: (§3.5.1)



         typedef
         extern
         static
         auto
         register

型指定子: (§3.5.2)



         void
         char
         short
         int
         long
         float
         double
         signed
         unsigned
         _Bool
         _Complex (Alpha専用)

      構造体または共用体指定子
      列挙型指定子
      typedef

構造体または共用体指定子: (§3.5.2.1)





struct または union 識別子(opt) { 構造体宣言並び }
struct または union 識別子

structまたはunion: (§3.5.2.1)



         struct
         union

構造体宣言並び: (§3.5.2.1)





構造体宣言
構造体宣言並び 構造体宣言

構造体宣言: (§3.5.2.1)





指定修飾子並び 構造体宣言子並び ;

指定修飾子並び: (§3.5.2.1)





型指定子 指定修飾子並び(opt)
型修飾子 指定修飾子並び(opt)

構造体宣言子並び: (§3.5.2.1)





構造体宣言子
構造体宣言子並び 構造体宣言子

構造体宣言子: (§3.5.2.1)





宣言子
宣言子(opt) : 定数式

列挙型指定子: (§3.5.2.2)





enum 識別子(opt) { 列挙子並び }
enum 識別子(opt) { 列挙子並び , }
enum 識別子

列挙子並び: (§3.5.2.2)





列挙子
列挙子並び 列挙子

列挙子: (§3.5.2.2)





列挙定数
列挙定数 = 定数式

型修飾子: (§3.5.3)



         const
         volatile

宣言子: (§3.5.4)





ポインタ(opt) 直接宣言子

直接宣言子: (§3.5.4)





識別子
( 宣言子 )
直接宣言子 [ 定数式 (opt) ]
直接宣言子
直接宣言子 ( 識別子並び (opt) )

ポインタ: (§3.5.4)





* 型修飾子並び(opt)
* 型修飾子並び(opt) ポインタ

型修飾子並び: (§3.5.4)





型修飾子
型修飾子並び 型修飾子

仮引数型並び: (§3.5.4)





仮引数並び
仮引数並び ...

仮引数並び: (§3.5.4)





仮引数宣言
仮引数並び 仮引数宣言

仮引数宣言: (§3.5.4)





宣言指定子 宣言子
宣言指定子 抽象宣言子(opt)

識別子並び: (§3.5.4)





識別子
識別子並び 識別子

型名: (§3.5.5)





指定修飾子並び 抽象宣言子(opt)

抽象宣言子: (§3.5.5)





ポインタ
ポインタ(opt) 直接抽象宣言子

直接抽象宣言子: (§3.5.5)





( 抽象宣言子 )
直接抽象宣言子(opt) [ 定数式 (opt) ]
直接抽象宣言子(opt) ( 仮引数型並び (opt) )

typedef名: (§3.5.6)





識別子

初期化子: (§3.5.7)





代入式
{ 初期化子並び }
{ 初期化子並び, }

初期化子並び: (§3.5.7)





初期化子
初期化子並び 初期化子

A.1.2.3文

文: (§3.6)





ラベル付き文
複文
式文
選択文
繰返し文
飛越し文

ラベル付き文: (§3.6.1)





識別子 :
case 定数式 :
default :

複文: (§3.6.2)





{ 宣言並び(opt) 文並び(opt) }

宣言並び: (§3.6.2)





宣言
宣言並び 宣言

文並び: (§3.6.2)






文並び

式文: (§3.6.3)





(opt) ;

選択文: (§3.6.4)





if ( )
if ( ) else
switch ( )

繰返し文: (§3.6.5)





while ( )
do while ( ) ;
for ( (opt) ; (opt) ; (opt) )

飛越し文: (§3.6.6)





goto 識別子 ;
continue ;
break ;
return (opt) ;

A.1.2.4外部定義

翻訳単位: (§3.7)





外部宣言
翻訳単位 外部宣言

外部宣言: (§3.7)





関数定義
宣言

関数定義: (§3.7.1)





宣言指定子(opt) 宣言子 宣言並び(opt) 複文

A.1.3前処理命令

前処理ファイル: (§3.8)





グループ(opt)

グループ: (§3.8)





グループ部
グループ グループ部

グループ部: (§3.8)





前処理トークン(opt) 改行
ifセクション
制御行

ifセクション: (§3.8.1)






ifグループ elifグループ (opt) elseグループ(opt) endif

ifグループ: (§3.8.1)





#if 定数式 改行 グループ(opt)
#ifdef 識別子 改行 グループ(opt)
#ifndef 識別子 改行 グループ(opt)

elifグループ: (§3.8.1)





elifグループ
elifグループ群 elifグループ

elifグループ: (§3.8.1)





#elif 定数式 改行 グループ(opt)

elseグループ: (§3.8.1)





#else 改行 グループ(opt)

endif行: (§3.8.1)





#endif 改行

制御行:





#include 前処理トークン 改行 (§3.8.2)
#define 識別子 置換並び 改行 (§3.8.3)
#define 識別子 ( 識別子並び )(opt) 置換並び 改行 (§3.8.3)
#undef 識別子 改行 (§3.8.3)
#line 前処理トークン 改行 (§3.8.4)
#error 前処理トークン (opt) 改行 (§3.8.5)
#pragma 前処理トークン (opt) 改行 (§3.8.6)
# 改行 (§3.8.7)

左括弧: (§3.8.3)





空白が先行しない左括弧文字

置換並び: (§3.8.3)





前処理トークン(opt)

前処理トークン: (§3.8)





前処理トークン
前処理トークン群 前処理トークン

改行: (§3.8)





改行文字