2018-09-17 11:02
2018-09-17 11:02

引数を取らないことを表明するために 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
$

引数を void とした場合

#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
Copyright © 53ningen.com