以前の回答は非常に正しいですが、これと他の多くの問題についての素晴らしい説明を提供しているので、DavidTribbleの優れたページにリンクしています。
ハイライト:
Cは、空のパラメーターリストで宣言された関数と、voidのみで構成されるパラメーターリストで宣言された関数を区別します。前者は不特定の数の引数をとるプロトタイプ化されていない関数であり、後者は引数をとらないプロトタイプ化された関数です。
一方、C ++は、2つの宣言を区別せず、両方とも引数をとらない関数を意味すると見なします。
CまたはC++としてコンパイルすることを目的としたコードの場合、この問題の最善の解決策は、明示的なvoidプロトタイプを使用して、パラメーターをとらない関数を常に宣言することです。
空の関数プロトタイプは、C99では非推奨の機能です(C89の場合と同様)。
func(void)構文はC ++で非推奨ではないことに注意する価値がありますが、一般的にはCスタイルのイディオムと見なされています。私が遭遇したほとんどのC++プログラマーは、空のパラメーターリストを好むと思います。
C ++標準、セクション8.3.5、パラグラフ2からの引用:
"parameter-declaration-clauseが空の場合、関数は引数を取りません。パラメーターリスト(void)は、空のパラメーターリストと同等です。この特別な場合を除いて、voidはパラメータータイプであってはなりません(ただし、voidから派生したタイプ) 、void *など)。」
どちらの形式も非推奨になることは言及されていません。標準の正しいセクションを教えてくれたTribble氏のすばらしいWebサイトに改めて感謝します。