掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
void main(void)を使うときってどんなときですか? (ID:50666)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>単に宣言を省略しているだけです。 Cにおいて,仮引数リストが空欄であることと,単一の宣言voidであることは, 意味合いが異なります。 以下,非常に突っ込んだ話になります。 初心者であることを自称する方は飛ばした方がよいでしょう。 まず,「プログラミング言語C 第2版」より関連する構文を列挙します。 declarator: pointer(opt) direct-declarator direct-declarator: identifier direct-declarator '(' parameter-type-list ')' direct-declarator '(' identifier-list(opt) ')' parameter-type-list: parameter-list parameter-list ',' '...' parameter-list: parameter-declaration parameter-declaration ',' parameter-list parameter-declaration: declaration-specifiers declarator declaration-specifiers abstract-declarator(opt) identifer-list: identifer identifer-list ',' identifier #抜粋終わり。 つまり, func() は, declarator: func() direct-declarator[1] direct-declarator[1]: func() direct-declarator[2] '(' identifier-list(opt)[1] ') direct-declarator[2]: func identifier[1] identifer[1]: func identifier-list[1]: (empty) として処理されます。それに対して, func (void) は, declarator: func(void) direct-declarator[3] direct-declarator[3]: func(void) direct-declarator[4] '(' parameter-type-list[1] ')' direct-declarator[4]: func identifier[2] identifer[2]: func parameter-type-list[1]: void parameter-list[1] parameter-list[1]: void parameter-declaration[1] parameter-declaration[1]: void declaration-specifiers[1] abstract-declarator(opt)[1] declaration-specifiers[1]: void abstract-declarator[1]: (empty) として処理されます。 ここで,関数呼び出し規則で,identifier-listを持つ関数に関しては, 仮引数と実引数の数が一致しない場合は単に「不定」となっています。 つまり, void func (); に対してfunc(10);は,不定ではあるけれど呼び出し自体は有効です。 それに対し,parameter-type-listを持つ関数に関しては, , ...で終わる関数を除いて仮引数と実引数の数(と型)を一致させなければいけません。 つまり, void func (void); に対してfunc(10);は構文エラーとなります。 #単一のparameter-type-list:voidを持つ場合についての特例でvoidのみの場合はひとつも持てない。 このあたりはC99になっても変わっていません。 C++では,identifer-listが許されないので,構文が少し変わっています。 で,parameter-type-listを空にすることが許され,それは単一のvoidと等しいということになっています。 #正確に書くとparameter-type-listではなくparameter-declaration-clauseが空の場合。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.