□ Cでは引数省略の関数定義fnc( )はfnc(void)でなくfnc(...)

 C言語において

  int fnc( )

という引数を省略した表現は、

  int fnc(...)

という、引数がいくつあってもよい、という意味になる ... が省略されている状態であって

  int fnc(void)

のような、引数が一つもない、という意味の宣言ではありません。
ので、C言語で、引数無し関数を宣言したければ、必ず

  int fnc(void)

のように void を指定する必要があります。

 もちろん fnc(void) と同様になるほうが理にかなっていると思いますし、 実際 C++ では、この件はC言語と非互換にして int fnc( ) は int fnc(void) と同様になります。ので、余計、紛らわしい事態になっているわけですが。
 結局、C言語でもC++でも、同様に使いたい関数については、引数の指定を省略しないように、する必要があります。


 もっとも、実用上、引数無し関数を引数不定個数の表現で宣言していても困ることはめったにないかもしれません。型宣言をきっちり行うことで得られるエラー検出のメリットを優先するか、よほどヘマをしない限り発生しないであろうエラーよりも記述の手間を減らすことや見た目を軽くすることを優先するかの、トレードオフともいえます (作業員のスキル次第なんですが、個人的経験から言えば型チェックをきちっとするほうが結果的によいとは思います)。

 ただ、どんなに思いこんでも、上記のようにC言語では ( ) は (void) と同じではない、ということだけは間違えるとマズイでしょう。