「型宣言子」についてコラム

脱線的コラム事項

 


 

宣言子の使い方 : 宣言の構文

 

 コンパイルするときに出る、宣言の構文エラーとは、(型)宣言子の使い方が間違っていることです。 使い方とはつまり、 int なら、int i ; とか、int i = 0 ; とか、int を使うときは、宣言子としての 構文が決まっています。int 0 ; では、「リテラルな数字※」 が int の次に来てはいけないので、構文違反となり、エラーです。int i #... とかとなっていてももちろんです (# がいけない)。そんな間違いをおかす人はいないとしても、「;」 を忘れたりすると・・・・・、よくあることです。

※ リテラル(な数字) とかいう使い慣れない言葉をたまに見かけることがあります。プログラム中に直接書かれている具体的な 「数(数値)」 のことです。if( i == 5 ) ... なら、5 は"リテラル"な表記です。i などといった 変数(名) ( 識別子 : Identifier) とは対照的ですね。同じ数字(データ) を表すもの、という意味では、「リテラル」と「識別子」は対義的です。更に、C 言語で書かれたプログラムコードの要素を分類していくと、とどのつまり、「リテラル(定数)」 「識別子(名前)」 「予約語」 「演算子」 「区切り(空白も含めて)」 「特別な記号及びコメント( # とか// とか /*。)」 です ( 独断 : 分析的に分類を試みる視点と、コンパイラ作成側、構成する側の視点の2とおりありますが、無理に分析していこうとするよりも、後者のほうが素直です)。でも 「リテラル」 なんて、結構どうでもいい言葉です。

宣言の構文に関しては、さほど込み入った文法事項があると考える必要もないと思います。実際には、int i ; のような一番単純な宣言が圧倒的に多いでしょう。
int i ; は、順に 宣言子 識別子 ; (デリミタ) ですん。

すこし話は飛んで、"構造体"の宣言(使用の宣言) では、

RECT rect = { 0, 0, 100, 75 } ;

のような文法が可能です(初期化)。便利です。覚えておきましょう。

2段階を踏んで、

RECT rect ;
rect = { 0, 0, 100, 75 } ;// コンパイラ次第ではできるかもしれませんが、これはアウト

のようにはできません。・・・だから「宣言の構文」 としてここで紹介したのです。

 

 〜予約語〜

(型)宣言子 : Declarator や、(型)修飾子 : Modifier。

 int や、unsigned のことを言っていますが、これらは C言語の 「予約語 」 の仲間です。この「予約語」 という言葉は、コンパイラ作成側、あるいはコンパイル技術の観点から眺めるとよりクリアーです。逆に、だからこそ、格式ばって聞こえます。C言語における文法上の 「キーワード」 とも呼ぶこともできます。※ 関数は予約語とは呼べません。「識別子」 にあたるでしょう。

 C 言語で、この手の 「キーワード」 っていったいどれだけあるのか、といったら、それらは C の 「予約語」 という一言で、包括的に カタ がつきます。C++ にももちろん、C++ の予約語、があります。いわずとも、これら 「言語」 を成り立たしめているものです。実際にプログラムを組む場合には、このほかの要素としては、「文法 : 書き方 」、「関数 : C の標準関数」 といった具合に整理できるでしょう (覚えるべきこと※、というか、または、使っていたら覚えることになってしまった、こと)。

 ※ 構えることはナンセンス

 


 

 

 

[トップ] [インデックス] [前へ(型宣言子)] [戻る]