- 締切済み
C言語における文法のうち文についての把握
Yune-Kichiの回答
- Yune-Kichi
- ベストアンサー率74% (465/626)
※規格上で,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) ';' と,宣言も;で終わる為です。
関連するQ&A
- C言語って一体何ができるんですか?
C言語やJAVAといった言葉をよく耳にしますが、それらがプログラム言語だということは分かるのですが、具体的にどういうことができるというのがよく分かりません。 よければお教えください。できるだけ具体的に説明していただけると助かります。お願いいたします。
- 締切済み
- C・C++・C#
- エクセルでC言語のfor文と同じことはできませんか
エクセルでVBAを使わずにC言語のfor文と同じことをしたいのですが 何か良い方法はありませんか? できれば 分かり易く解説して頂けるとありがたいです。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- C言語特有の文法や概念について
C言語に特有な記述の仕方や概念って何かあるでしょうか? C言語のみにある特性でなくてもよく、例えば、Curly-bracket言語であるとか、返り値なしのvoidが扱われているとか・・・。 なるべく、手続き型言語である等といったパラダイム的なものではなく、C言語でプログラムを書く上での特殊な文法とか、そういったものを教えて頂ければと思います。 ちょっとわかりづらい質問で申し訳ありませんが、よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- C言語について…
C言語についてですが… while文とdo while文はどう違うんですか?プログラムの書き方が違うくらいでしょうか? またwhile文とdo while文のどちらかしか使えない場合、どちらを使いますか?理由もお願いします。
- ベストアンサー
- その他(学問・教育)
- C++言語を学びたい
C++言語を学びたいと思っています。プログラミングはいままで一度もしたことなく全くの初心者です。C++言語のテキストは購入したのですが、実際に行うにあたり、何かソフトなどが必要なのでしょうか?具体的に教えて頂ければ幸いです。
- ベストアンサー
- C・C++・C#
- c言語でif文の処理について
お世話になります。 C言語を勉強中なのですが AとBが一緒でなおかつCとDが一緒ならば というif文を作りたいのですがどのように記載すればいいのでしょうか? よろしくお願いいたします。
- 締切済み
- C・C++・C#
- c言語でできること
c言語は具体的には何ができるのでしょうか ものすごくがんばれば市販のゲームソフトなども作れるようになるのでしょうか というのは 今、僕はc言語のプログラミングを勉強しています コンパイルするとms-dosの黒い画面が表示されますよね。オセロなどのゲームはとても見にくいです。 あのようなゲームではなく、ちゃんと絵があるようなゲームは作れるのでしょうか?? また3Dのゲームはつくれるのでしょうか? 「c言語のゲーム」とググってもありません c言語だけではできなくてdirectxなどがいることは知っています。 プログラミングを学ぶ上でなにか目標ができたら それに向けてがんばれると思うので情報よろしくお願いします。 わかりにくい文章ですいません^^;
- ベストアンサー
- C・C++・C#
お礼
ご丁寧で詳しい解説は有難かったのですが、ちょっと今の私には難しすぎます。もうすこし理解が進んだらもう一度考えてみようかと思います。