• 締切済み

C言語における文法のうち文についての把握

Yune-Kichiの回答

回答No.3

※規格上で,boldのものは'で囲っています。また,下付文字でoptとなっているものは,(opt)と表現しています。 > いちばんお聞きしたいのはこの文とは何かです。 ISO/IEC 9899:1999 (以下IS) の6.8 Statements and blocksにあるものを言います。 > statement: >  labeled-statement >  compound-statement >  expression-statement >  selection-statement >  iteration-statement >  jump-statement 一応,これが「文」になるもの全てです。 細かく見ていきます。 IS 6.8.1 Labeled statements > labeled-statement: >  identifier ':' statement >  'case' constant-expression ':' statement >  'default' ':' statement ラベル付き文です。 一つ目がいわゆる「ラベル」,二つ目が「caseラベル」,三つ目が「defaultラベル」です。 IS 6.8.2 Compound statement > compound-statement: >  '{' block-item-list(opt) '}' 複合文です。block-item-listは,以下のようになります。 > block-item-list: >  block-item >  block-item-list block-item > block-item: >  declaration >  statement declarationは文ではないので,block-itemが宣言または文という形になっています。 # C++では「宣言文」というのがあったりしますが (ISO/IEC 14882:2003 6.7 Declaration statement) IS 6.8.3 Expression and null statements > expression-statement: >  expression(opt) ';' 式文または空文。副作用を発生させるという意味で,一番重要な文です。 例えば, puts("Hello, world!"); も式文になります。 IS 6.8.4 Selection statements > selection-statement: >  'if' '(' expression ')' statement >  'if' '(' expression ')' statement 'else' statement >  'switch' '(' expression ')' statement 選択文。switchの定義は不思議かもしれませんが,こういう定義になっています。 また,ifやswitchの制御式はexpressionなので,C++と違ってここで宣言を行う事はできません。 # C++でdynamic_castする場合のような,有効な利用法はないと思いますが。 IS 6.8.5 Iteration statements > iteration-statement: >  'while' '(' expression ')' statement >  'do' statement 'while' '(' expression ')' ';' >  'for' '(' expression(opt) ';' expression(opt) ';' expression(opt) ')' statement >  'for' '(' declaration expression(opt) ';' expression(opt) ')' statement 繰り返し文。4番目は for (int i = 0; i < 10; ++i) ; のようなことを許す為の定義。declarationに;が含まれるので,なんとなく不思議な文法定義になっています。 で,whileやforの制御式はexpressionなので,(以下略)。 IS 6.8.6 Jump statements > jump-statement: >  'goto' identifier ';' >  'continue' ';' >  'break' ';' >  'return' expression(opt) ';' 最後に分岐文の定義です。 文の定義自体としては;で終わるものは少ないのですが, ;で終わらないものはcompound-statementを除いて末尾がstatementになっています。 このため,;で終わらない文は実質的にcompound-statementということになります。 なお,この逆,;で終わるから文は必ずしも成り立ちません。 IS 6.7 Declarations > declaration: >  declaration-specifiers init-declarator-list(opt) ';' と,宣言も;で終わる為です。

gayaldy21
質問者

お礼

ご丁寧で詳しい解説は有難かったのですが、ちょっと今の私には難しすぎます。もうすこし理解が進んだらもう一度考えてみようかと思います。

関連するQ&A

  • C言語って一体何ができるんですか?

    C言語やJAVAといった言葉をよく耳にしますが、それらがプログラム言語だということは分かるのですが、具体的にどういうことができるというのがよく分かりません。 よければお教えください。できるだけ具体的に説明していただけると助かります。お願いいたします。

  • C言語って。

     ものすごく基本的な質問なのですが、 C言語って何ができるのですか? 具体的にはどういう風に使われているのですか? 市販されているPC用のアプリケーションソフト もC言語で作られているのですか?

  • C言語における文法について

    C言語でforループのかっこの中はなぜ,で区切るのでしょうか?

  • エクセルでC言語のfor文と同じことはできませんか

    エクセルでVBAを使わずにC言語のfor文と同じことをしたいのですが 何か良い方法はありませんか? できれば 分かり易く解説して頂けるとありがたいです。 よろしくお願いします。

  • C言語特有の文法や概念について

    C言語に特有な記述の仕方や概念って何かあるでしょうか? C言語のみにある特性でなくてもよく、例えば、Curly-bracket言語であるとか、返り値なしのvoidが扱われているとか・・・。 なるべく、手続き型言語である等といったパラダイム的なものではなく、C言語でプログラムを書く上での特殊な文法とか、そういったものを教えて頂ければと思います。 ちょっとわかりづらい質問で申し訳ありませんが、よろしくお願い致します。

  • C言語について…

    C言語についてですが… while文とdo while文はどう違うんですか?プログラムの書き方が違うくらいでしょうか? またwhile文とdo while文のどちらかしか使えない場合、どちらを使いますか?理由もお願いします。

  • C++言語を学びたい

    C++言語を学びたいと思っています。プログラミングはいままで一度もしたことなく全くの初心者です。C++言語のテキストは購入したのですが、実際に行うにあたり、何かソフトなどが必要なのでしょうか?具体的に教えて頂ければ幸いです。

  • c言語でif文の処理について

    お世話になります。 C言語を勉強中なのですが AとBが一緒でなおかつCとDが一緒ならば というif文を作りたいのですがどのように記載すればいいのでしょうか? よろしくお願いいたします。

  • c言語でできること

    c言語は具体的には何ができるのでしょうか ものすごくがんばれば市販のゲームソフトなども作れるようになるのでしょうか というのは 今、僕はc言語のプログラミングを勉強しています コンパイルするとms-dosの黒い画面が表示されますよね。オセロなどのゲームはとても見にくいです。 あのようなゲームではなく、ちゃんと絵があるようなゲームは作れるのでしょうか?? また3Dのゲームはつくれるのでしょうか? 「c言語のゲーム」とググってもありません c言語だけではできなくてdirectxなどがいることは知っています。 プログラミングを学ぶ上でなにか目標ができたら それに向けてがんばれると思うので情報よろしくお願いします。 わかりにくい文章ですいません^^;

  • C言語 と C++ の違いとは

    C言語 と C++ の違いについて具体的に教えてください。  よろしくお願いします。