ページ 11

mainについて

Posted: 2011年9月11日(日) 17:47
by tyutyu
include<stdio.h>

int main(void)



include<stdio.h>

int main()


とありますが、どう違うのですか???またvoidをつけなければいけない時はどういう時でしょうか?
参考書に載っていなかったので質問しました。

後、Cの本でソースを同じC++でつくったら、作成できません。

例 Cの場合 main
  C++の場合 int main

Re: mainについて

Posted: 2011年9月11日(日) 19:51
by box
tyutyu さんが書きました: int main(void)
int main()
とありますが、どう違うのですか???またvoidをつけなければいけない時はどういう時でしょうか?
前者のように、引数の並びとして
void
と書いた場合は、「引数がない」ということを明示する意味があります。

後者の、引数の並びを省略する書き方は、したことがないのでよくわかりません。もしかしたら、CとC++とでは意味が異なるのかもしれません。
tyutyu さんが書きました: 後、Cの本でソースを同じC++でつくったら、作成できません。

例 Cの場合 main
  C++の場合 int main
おっしゃりたいことは何となくわかるんですが、どうもモヤモヤしてしまいますね。
まあ、C++の話は、まだしなくてよいのかも…。

Re: mainについて

Posted: 2011年9月12日(月) 07:43
by naohiro19
C言語の標準規格では

コード:

int main(int argc. char** args){ /* .. */ }

コード:

int main( void ){ /* .. */ }
の2つのみで

コード:

void main(){ /* .. */ }
は規格外です。

Re: mainについて

Posted: 2011年9月12日(月) 12:22
by へろりくしょん
tyutyu さんが書きました:とありますが、どう違うのですか???またvoidをつけなければいけない時はどういう時でしょうか?
参考書に載っていなかったので質問しました。
というより、原則として付けるべき。 だと心得てください。

C言語では hoge(void) と hoge() では意味が異なります。
前者の場合は、引数を取らない事を意味します。
後者の場合は、引数のチェックを行わない事を意味します。

ですので、
void hoge(void)
{
  ・・・
}

void foo()
{
  ・・・
}

main()
{
  hoge(100);  //エラー
  foo(100);   //おk
}

となります。

ちなみに、C++では、仮引数の宣言を省略した場合、それは void を与えた時と同じ意味です。
tyutyu さんが書きました:例 Cの場合 main
  C++の場合 int main
C言語の場合、関数の戻り値の型を省略した場合、標準で int 型であると解釈されます。
C++の場合は省略する事は許されません。

#ところで、コードタグってどうやって使うんでしたっけ。

Re: mainについて

Posted: 2011年9月12日(月) 12:36
by non
へろりーな さんが書きました:#ところで、コードタグってどうやって使うんでしたっけ。
タグをつけたい範囲をドラッグして選択し、添付図のコード横の三角(赤丸部分)から、
言語を選びます。
もちろん直接
[code=c] と [/code] で囲っても可。([]は半角)

Re: mainについて

Posted: 2011年9月12日(月) 21:21
by みけCAT
トピックの話とはあまり関係なくてすみません。
naohiro19 さんが書きました:C言語の標準規格では

コード:

int main(int argc. char** args){ /* .. */ }

コード:

int main( void ){ /* .. */ }
の2つのみで

コード:

void main(){ /* .. */ }
は規格外です。
とありますが、

コード:

int main(int argc, char* args[]){ /* .. */ }
でもいいですよね?
また、argcとargsの部分も規格なのですか?
自分はよく

コード:

int main(int argc,char* argv[]){ /* .. */ }
のように書いています。
読みやすさは別として、

コード:

int main(int a,char** b){ /* .. */ }
のように適当な変数名だとどうなりますか?
混乱させてしまったらすみません。

Re: mainについて

Posted: 2011年9月12日(月) 21:26
by box
慣習上
argc(argument countのことと思われ)

argv(argument valueのことと思われ。argsは見たことがない)
を使ってるだけです。

名前はaでもbでも、型さえ合ってればよし。

Re: mainについて

Posted: 2011年9月12日(月) 21:37
by みけCAT
なるほど。