プログラミング言語C – 式
津路です。
引き続き、プログラミング言語C 第2版 ANSI規格準拠 K&R著(共立出版)を読んで、気になるところを書いています。
付録A 参照マニュアルの以下のページを取り上げます。
A7.2 一次式 page245
「一次式は識別子、定数、文字列あるいはかっこで囲まれた式である。」
ここで、以下の部分が訳されていません。
primary-expression:
identifier
constant
string
(expression)
以下のように訳してみました。
一次式
識別子
定数
文字列
(式)
A7.3 後置式 page246
「後置式の中の演算子は左から右へグループ化される。」
postfix-expression:
primary-expression
postfix-expression [ expression ]
postfix-expression [ argument-expression-list(opt) ]
postfix-expression . identifier
postfix-expression -> identifier
postfix-expression ++
postfix-expression —argument-expression-list:
assignment-expression
argument-expression-list , assignment-expression
以下のように訳してみました。
わかりにくいので、–の後に簡単なヒントと節の番号を加えました。
後置式:
一次式
後置式 [ 式 ] –添え字 A7.3.1
後置式 [ 引数式リスト(オプション) ] –関数 A7.3.2
後置式 . 識別子 –メンバー A7.3.3
後置式 -> 識別子 –メンバー A7.3.3
後置式 ++ –インクリメント A7.3.4
後置式 — –デクリメント A7.3.4
A7.3.2 関数呼出し page246
「関数呼出しは関数指定子と呼ばれる後置式であり、その後には、当の関数への引数であるコンマで区切られた代入式のリスト(空でもありうる)を含むカッコが付く。」
以上の文章は、単語の順序が少し変で、区切りがわからず変です。以下のように訳してみました。
「関数呼び出しは、後置式であり、関数指示子と呼ばれる。その後には、カッコで囲まれた、空か、あるいはコンマで区切られた代入式のリストが続く。このリストは、関数の引数を構成する。」
次の文章はさらにわかりにくいです。
「この後置式が、現在の通用範囲の中では宣言されていない識別子からなる場合は、その識別子は、
1 | extern int identifier(); |
という宣言がその関数呼び出しを含む最も内部のブロックで与えられたかのように、暗黙のうちに宣言される。」
「現在の通用範囲の中では宣言されていない」??
そう、ここでは、「通用範囲」は、スコープのことを指します。つまり、式が現在のスコープで宣言されていない識別子を含む場合、という意味です。
それに対応して、その識別子が、暗黙のうちに宣言されるということです。
その宣言場所は、関数呼び出しを含む内部の深層です。