int main() {
dummySum(1, 2);
return 0;
}
int dummySum(int a, int b) {
return a + b;
}
...は、何の警告を生成しませんか?宣言されていない機能に直面したとき
int main() {
dummySum(1, 2);
return 0;
}
int dummySum(int a, int b) {
return a + b;
}
...は、何の警告を生成しませんか?宣言されていない機能に直面したとき
は、コンパイラは、引数の与えられた数(と思う)を受け入れ、int
(私は確信している部分)を返す関数を想定しています。あなたの2番目のものはそうしないので、あなたは再定義の警告を受け取ります。
私は非常に迅速な前向きなスキャンに基づいて、C99(PDF link)がこれを削除したと信じています。しかし、GCCが(警告付きで)それらを許可するという大きな驚きはありません。私は
(すべての警告をオンにする)-Wall
を使用することをお勧め...コンパイルに失敗し始めるだろうどのくらいのコードを想像することはできませんので、あなたはときに、追加情報の膨大な量は、(あなたが特定の警告をオフにすることができます取得しますが必要な場合は、が生成されていることには本当に良い理由があります。
C99では 'implicit int'が削除されています。したがって、厳密なC99モードまたはC11モードでは、IMOはコンパイルしないでください。しかし、gccはそれをコンパイルして警告を出すだけです(両方に対して)。 –
@ダニエルフィッシャー:面白い!実際には、私はC99を見て、それ以上に進んでいると思います。暗黙の関数宣言を完全に削除します。 (興味深いことに、序文には2つの項目が別々にリストされています。「暗黙的なint」と「暗黙の関数宣言の削除」)。私は、 "暗黙の' int' "ビットは宣言された関数を参照していますが、戻り値の型はまったくありません。 –
おそらく、言語弁護士ではないので、型が宣言されていないために型が想定されるすべての状況に「暗黙のint」を使用する傾向があります。 –
関数が宣言される前に使用することはできません。
int
これを返し
パラメータ
C99では、関数の暗黙の宣言が言語から削除されており、実装はソースコードの翻訳を自由に行うことができます。
そうではありません。私はそれも考えました。 'int'と' void'は 'dummySum'の型を返します。 – mattjgalloway
宣言されていない関数のデフォルトの戻り値の型はintです。 voidとして宣言すると、一致する関数は見つかりません。どちらの場合でも警告が表示されるように、より強力な警告チェックを使用すると(たとえば-Wall)、私は信じています。最初の投稿で – Joe
が同じだった、あなたは正しいです。私は投稿を編集しました。申し訳ありません –