voidについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
jay
記事: 314
登録日時: 13年前
住所: 大阪市
連絡を取る:

voidについて

#1

投稿記事 by jay » 12年前

voidについて素朴(?)な疑問が生じたので質問させていただきます。

例えば以下のような関数があったとします

コード:

int GetData()
{
	return Data;
}
この関数、見ての通り引数は不要です。
僕ならば間違いなく上記のように引数リストには何も書きませんが、学校のとある先生はこのような場合必ず以下のように引数リストにvoidを記述します

コード:

int GetData(void)
{
	return Data;
}
書く必要がないのに、何故わざわざvoidを記述するのかと聞いたところ
・昔の癖やねん、昔はvoidを書かへんかったらコンパイラがエラー吐き出しよったから
・あと書いといた方が引数いらんねやって分かりやすいやろ

と返答が返ってきました(若干うろ覚えな所もありますが)
前者は先生がベテランなのでともかくとして、後者の理由に疑問が生じました。

今は引数が不要の場合、リストになにも書かなくても問題ないのは今や常識(のハズ)ですし
少なくともウチのクラスメートにもこのような場合にvoidを記述する人はいません。
そこで質問なのですが、このような場合引数リストにvoidは書いた方がいいのでしょうか?
書かない方がいいのでしょうか?
またはそれぞれ使い分けた方がいい場合はどのように使い分けたらいいのでしょうか?
最後に編集したユーザー jay on 2011年12月08日(木) 20:58 [ 編集 1 回目 ]
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: voidについて

#2

投稿記事 by beatle » 12年前

C言語だとvoidを書かない場合、引数リストを省略したと見なされるはずです。
つまり、引数が無い、のではなく、引数リストを書いていない、ということです。
引数がない場合はvoidを書くべきです。
C++だったらvoidを書いても書かなくても同じです。

たかぎ
記事: 328
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: voidについて

#3

投稿記事 by たかぎ » 12年前

beatleさんが書かれているように、CとC++では振る舞いが異なります。
Cでは、仮引数並びを省略すると、どんな型の実引数を何個渡してもかまいません。
一方、C++では、仮引数並びを書かなければvoidを指定したのと同じ意味になります。
具体的に言うと、

コード:

void f();
f();  // OK
f(1); // OK
f(1, 2, 3); // OK
のようになります。
C++では、もちろん最初の記述以外はエラーになります。

CとC++のどちらでも使う(もっといえば、Objective-Cでも使う)ヘッダファイルを記述するのであれば、voidを記述しておくべきです。

jay
記事: 314
登録日時: 13年前
住所: 大阪市
連絡を取る:

Re: voidについて

#4

投稿記事 by jay » 12年前

お二方とも簡潔かつ明瞭に教えて頂いて感謝です。
僕ももうすこし短く分かりやすい説明の仕方を身に付けたいです・・・

それはともかく、疑問が概ねスッキリしました
CとC++では扱いが違うのですね、僕は開発はほぼC++で行うので意識する必要はなさそうですが
今後もそうであるとは限らないので覚えておくべきですね。

ついでにお聞きしたいのですがC#の場合扱いはどうなるのでしょうか?
よろしければ教えてください。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

アバター
bitter_fox
記事: 607
登録日時: 13年前
住所: 大阪府

Re: voidについて

#5

投稿記事 by bitter_fox » 12年前

jay さんが書きました: ついでにお聞きしたいのですがC#の場合扱いはどうなるのでしょうか?
C#の場合だと書いたらエラーになると思います。
引数がないときは何も書かないかと。

[hr][追記]
エラーになりました。
http://ideone.com/gbfhD

jay
記事: 314
登録日時: 13年前
住所: 大阪市
連絡を取る:

Re: voidについて

#6

投稿記事 by jay » 12年前

>bitter_foxさん
C#の場合エラーになるのですか、フムフム・・・
C#だろうとC++だろうと僕の中では省略するのが普通だったのですが
学校では稀に開発にC#(XNA)の使用を強制されることがあるので一応知っておきたかったのです。
C#の場合は省略するのが唯一の答えですね、把握しました。

これで疑問が全て解決してスッキリしました。
教えてくださったbeatleさん、たかぎさん、bitter_foxさん
どうもありがとうございました
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

閉鎖

“C言語何でも質問掲示板” へ戻る