引数を取らないことを表明するために func_name(void)
と書くのと func_name()
と書くのは何が違うのか。違いを観察してみる。
次のようなコードをコンパイルすると通ってしまう。
#include <stdio.h> #include <stdlib.h> void do_nothing() { } int main(int argc, char *argv[]) { do_nothing("hoge"); exit(0); }
コンパイルして実行してみる。
$ make mkdir -p bin gcc ./src/main.c -o ./bin/main -Wall $ ./bin/main $
#include <stdio.h> #include <stdlib.h> void do_nothing(void) { } int main(int argc, char *argv[]) { do_nothing("hoge"); exit(0); }
以下のように怒られが発生する
$ make mkdir -p bin gcc ./src/main.c -o ./bin/main -Wall ./src/main.c: In function ‘main’: ./src/main.c:8:5: error: too many arguments to function ‘do_nothing’ do_nothing("hoge"); ^ ./src/main.c:4:6: note: declared here void do_nothing(void) { ^ make: *** [main] Error 1
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです