こんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴8年)で、資格は13個保有しています。
結論、引数の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を指定するとどうなりますか?
引数チェックが行われます。
なぜこのような挙動になっているのですか?
K&R時代(ANSIでC言語の規格が定められる以前)の定義と互換性を保つためとされています。
まとめ
今回は、C言語で引数のvoidは省略すべきかについて解説しました。
以下が本記事のまとめになります。
- おすすめ本
C言語の勉強なら「独習C 新版
最後までお読みいただき、ありがとうございました!
- クソおすすめ本
海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。