やっほー
【C言語】関数に引数がない場合はvoidを記載しようね

【C言語】関数に引数がない場合はvoidを記載しようね

ちょっとC言語を触っていて気になったのでメモしておきます。

気になったのはこちら

↑はただのサンプルプログラムなんですが、引数に「void」ってありますよね。
他の言語を基準に考えると違和感ありありだし、「そもそも意味ないんじゃね?」って思って書いていなかった時期もあります。
が、これには意味がある、というかプログラムを実行すると挙動が違うんですよね。。

引数にvoidがない場合

hoge関数には引数がありませんが、main関数で呼び出す際に引数を2つ指定しています。
普通に考えると実行時にエラーが出そうです。

 

ところがどっこい!
標準出力も正常に行われていますし、コード0も返却されています。

引数にvoidがある場合

hoge関数に「void」を指定しました。
この状態で実行してみます。

 

あら不思議。
引数多すぎ!!」って言われてエラーになりました。

何が起きている??

まあ、C言語はそういうもんってことです。

要約すると、voidを記載しなかった場合、呼び出し先関数は呼び出し元で指定された引数の数までチェックしないってことです。

引数が何個渡されようが関係ないぜってスタンスですね。

voidを指定したら?

見てきた通りですが、voidを記載すれば、「呼び出し元からは何も渡されていないよね?」っていうチェックが行われるわけです。

で、どっちがいい?

普通に考えて、本来呼び出し先関数は引数がないので呼び出し元も空であるべきです。

voidを記載しない場合、プログラム自体は動いてしまうので余計な誤解を生んでしまいますし、何より気持ち悪い。

なので、関数において引数がない場合は「void」を記載するべきです。

参考サイト

まとめ

どうでもいいんですけど、「#include <stdio.h>」の「stdio.h」って「スタンダードアイオーヘッダ」って読むじゃないですか?

カッコイイですよね。

以上です。

さよなら。

【C言語】関数に引数がない場合はvoidを記載しようね
フォローしてもらえると泣いて喜びます