答え
この書き方だと引数が「不定」になってしまう!
void SayHello();
引数が「ない」ときは、こう書くのが正解!
void SayHello(void);
解説
今回のプログラムは、第06問と似ていますね。サブルーチンSayHello()
を手前で宣言して、main()
から呼び出せるようにしています。ただし、SayHello()
には引数がありません。
こういう場合、引数リストを省略して()
と書くと、C言語では引数が「不定」という扱いになってしまいます。引数が「ない」ときは、そのことを(void)
と明示しなければなりません。
そのため、SayHello()
の宣言は、正しくはこう書きます。
void SayHello(void);
定義するときも同様で、こうです。
void SayHello(void) {
……
}
さらに、main()
も同様です。
int main(void) {
……
}
質問でーす!引数が「不定」の関数って、どういうときに使うんですか?
それがねぇ、使わないのよ。
ええっ!
引数が「不定」っていうのはね、古いバージョンのコンパイラの仕様なの。
昔の書き方ってことですか?
そうそう。古いプログラムが動かなくなってしまわないように、昔の書き方も許されているということね。
なおC++では、引数リストを()
と省略すると、(void)
と同じように引数「なし」の意味になります。C言語よりも新しいプログラミング言語なので、歴史的な「しがらみ」も少ないというわけです。
ここがポイント!
引数「なし」の関数は
(void)
と書こう!
修正後のプログラム
main.c
#include <stdio.h>
#include <stdlib.h>
void SayHello(void);
int main(void) {
SayHello();
return EXIT_SUCCESS;
}
void SayHello(void) {
puts("Hello!");
}
実行結果
Hello!