【C言語】引数のvoidは省略すべき?【結論、記載するべき】


C言語で関数に引数がない場合ってvoidは書くべきなのかな?
具体的なソースコードを交えて教えてほしんだけど。。
こんな疑問にお答えします。
- 本記事の内容
- 本記事の信頼性
本記事を書いている僕はエンジニア歴7年です。
C言語は普段から勉強しているので、かなり有益な情報を発信できるかと思います。
結論、引数のvoidは記載すべきです。
理由は後ほど解説しますが、voidがあるかどうかで挙動が変わるので注意してください。
本記事を読んでいただければ、引数のvoidは省略すべき否かがしっかりと理解できるので早速見ていきましょう!



すぐ読み終わるので、是非最後まで読んでみてください!
【結論】引数のvoidは記載すべき
結論、引数のvoidは記載しましょう。
理由としては、voidを記載することで引数チェックが行われるからです。



詳しくは以下で解説していきます。
実際の挙動を確認してみる
実際にサンプルコードを交えて解説します。
引数にvoidがない場合
#include <stdio.h>
void hoge() {
printf("あほー");
}
int main(void) {
// 引数が2つ
hoge(1, 2);
return 0;
}
hoge関数に引数はありませんが、main関数での呼び出し時に引数を2つ渡しています。



普通に考えると実行時にエラーが発生しそうです。
Running /home/ec2-user/environment/arg_void.c
あほー
Process exited with code: 0
実際にコードを実行すると、エラーは発生せず正常終了しています。
引数にvoidがある場合
#include <stdio.h>
void hoge(void) {
printf("あほー");
}
int main(void) {
// 引数が2つ
hoge(1, 2);
return 0;
}
hoge関数にvoidを指定しました。
Running /home/ec2-user/environment/arg_void.c
/home/ec2-user/environment/arg_void.c: In function ‘main’:
/home/ec2-user/environment/arg_void.c:10:5: error: too many arguments to function ‘hoge’
hoge(1, 2);
^
/home/ec2-user/environment/arg_void.c:3:6: note: declared here
void hoge(void) {
^
Process exited with code: 1
コードを実行すると引数エラーが発生します。
voidを指定すると引数チェックが行われる
引数にvoidを指定すると引数チェックが行われます。
本来、呼び出し元と呼び出し先で引数の数は一致するべきなので、引数エラーの発生は正しい挙動です。
つまり、引数にvoidは記載するべきと言えます。
よくある質問 | 引数のvoidは省略すべきか否か
- 引数にvoidを指定するとどうなりますか?
-
引数チェックが行われます。
- なぜこのような挙動になっているのですか?
-
K&R時代(ANSIでC言語の規格が定められる以前)の定義と互換性を保つためとされています。
まとめ | 【C言語】引数のvoidは省略すべきか否か
今回は、C言語で引数のvoidは省略すべき否かについて解説しました。
以下が本記事のまとめになります。
- C言語において、関数に引数がない場合はvoidを記載するべき。
- voidがない場合は引数チェックが行われないため、余計な誤解を生んでしまう可能性がある。
この記事があなたのお役に立てば幸いです。
サイト内には、他にも初心者向けの記事を多く投稿していますので良ければ参考にしてみてください。
最後までお読みいただきありがとうございました!