• 締切済み

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

C言語で文は「,」で区切るということですが、ここで言う文とは何でしょうか?具体的にどのようなものとして認識すれば よいのでしょうか?

みんなの回答

  • nery1024
  • ベストアンサー率0% (0/1)
回答No.4

自分もいま勉強中なのですが、簡単に説明しますね。 文とは ですが。 まずC言語のソースを書くとして、 ヘッダーファイル プログラムの内容 おしまい たぶん、お知りになりたいのは、このプログラムの内容に書くソースの事かと思うので、int main(){};←これが文です。 意味は、周りに色んな物が転がってるけど、全てはint main(){この中};に書かれた物を参照して動きます。 そして、;についてですが、C言語で使う命令文を組み合わせて何かをさせるわけですが、このint main(){この中に命令文を書きます}; 例えばコマンドプロンプトに文字を表示する際、printf("ここに表示する文字")←のような命令文があります。この最後に;を付けないとprintfが終わった事を、コンピュータが理解しないので、エラーが出て命令を実行しなくなります。 他の方の回答に;を付けなくて良い場合がありましたが、今の時点では簡単かつ明確に覚えるため、何かをさせる文を書いたら、;を付けて終わりだよって教える。と理解すれば良いかと思います。

gayaldy21
質問者

お礼

ご丁寧に有難うございます。なかなか入門書だけ買って読んでみても難しい部分があるような気がするのですが?・・・皆さんどのように理解していらっしゃるのかと思い思い切って質問してみました。

全文を見る
すると、全ての回答が全文表示されます。
回答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
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> C言語で文は「,」で区切るということですが、 , は「式」を区切ることはできても、「文」を区切ることはできません。 「文」を区切るのは原則として ; ですが、複合文の場合は ; を必要としません。なぜなら、{ から } までが複合文ですので、区切り文字がなくても文の範囲が明確だからです。

gayaldy21
質問者

補足

早速のご回答有難うございます。ただここでどういうものを文として認識すべきなのでしょうか?ご存知でしたら教えて頂きたいことなのですが・・・

全文を見る
すると、全ての回答が全文表示されます。
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

http://www.lysator.liu.se/c/ANSI-C-grammar-y.html#statement を見た感じだと、「文は『;』で区切る」と覚えといたほうが良いような。 (正確に言うと上記yacc形式構文表記を見ると分かるとおり、『;』が「文を区切っている」わけでなくて、「文のいくつかの形式は末尾に『;』を付ける」と理解する必要があります。) > C言語で文は「,」で区切るということですが ちなみに何に書いてありました?

gayaldy21
質問者

補足

申し訳ありません。,ではなく;であったようです。失礼しました。C言語で何が文なのか。どういうものを文と呼んでいるのかよく分からないのです。命令とは別に分けられているようですが、この言語における文の定義が今一つ分かりません。いちばんお聞きしたいのはこの文とは何かです。幾つか参考図書を見ましたが、ただいきなり文を;で区切るという記述が多いような気がします。

全文を見る
すると、全ての回答が全文表示されます。

関連する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++ の違いについて具体的に教えてください。  よろしくお願いします。

近年の自然災害について
このQ&Aのポイント
  • 石川県の珠洲市で震度6強の地震があり、兵庫の伊丹市で堤防決壊による大水害が発生しています。皆さんの地域でも自然災害はありましたか?
  • 関東住まいですが、東日本大震災では道路の隆起や建物への被害がありました。また、ダブル台風の年には水田からの水害で道路が沈んで隣町への移動が困難になりました。
  • 自然災害は私たちにとって身近な問題です。地震や洪水などに備えて、防災対策をしっかりと行っていきましょう。
回答を見る