3

奇妙なコンパイル警告が表示されます。断続的であり、すべてのビルドに表示されるわけではありません。次の行に対して、「初期化により、キャストなしで整数からポインターが作成されます」という警告が表示されます。

callbackTable *callbacks = generateLoggingCallback();

そして、完全を期すために、これは同じ結果をもたらします

callbackTable *callbacks;
callbacks = generateLoggingCallback();

そのための関数プロトタイプは次のとおりです。

callbackTable *generateLoggingCallback();

実装は

callbackTable *generateLoggingCallback() { ... }

ですから、何が問題なのかよくわかりません。アイデア?

4

3 に答える 3

7

純粋な C の場合、「不明な」機能に関する警告はありませんか? はいの場合、コンパイラは不明な関数がintを返すと判断し、続行します..適切なヘッダーが含まれているかどうかを確認し、関数が使用される前に宣言されます。

于 2009-12-30T13:20:28.327 に答える
2

thisに従って、答えが見つかりました。関数プロトタイプを含むヘッダー ファイルを参照していませんでした。したがって、私が理解しているように、コンパイラは関数の型シグネチャを推測し、戻り値の型をデフォルトとして推測していましたint

関数を含む実装ファイルがビルドに含まれ、戻り値の型 ( であると想定int) がポインターとして宣言された変数に配置されたため、すべて機能しました。

于 2009-12-30T13:22:46.267 に答える
0

関数generateLoggingSmfReaderCallbackまたはgenerateLoggingCallbackですか?プロトタイプの関数名が呼び出しの関数名と一致しない場合、奇妙なことに、ビルドごとに警告が表示されないだけです。

于 2009-12-30T13:15:24.877 に答える