2017-01-24 5 views
0

こんにちは。質問があります。制御は非void関数の終わりに達しますが、xcodeではエラーですが、gccではエラーではありません

bool testFunction(int arg) { int value = arg; } 

この機能は、gcc &対警告のみでエラーではありません。

xcodeでは、このソースはエラーです。 "制御が非空白関数の終わりに達します"

なぜxcodeにエラーが発生するのかわかりません。

エラーを警告として処理するオプションがxcodeにNOを設定しています。

ありがとうございました。

+0

値を返すのはどうですか? –

+0

haha​​。あなたのコメントは正しいです。しかし、私はそのソースを書いていませんでした。多くの人が似たような間違いをしているので、私は間違いがあります。 :) –

+0

ああ、私はあなたがエラーメッセージを排除しようとしていると思った。私の悪い。続ける! –

答えて

3

C++では、non-void関数から何も返さないのは、未定義の動作です。

コンパイラはあなたのコードからUBを削除しないことに注意してください。彼らは単にすべてのUBパターンを検出することはできません。彼らはそれが「疑わしい」ときに警告することしかできません。

このパターンが「許可」のままであるという事実は、古いコードとの下位互換性のためです。それはプログラマの責任です。

ほとんどの場合、すべてのコンパイラではないにしても、この特定の警告をエラーとして設定するオプションがあります。このオプションは、「すべての警告をエラーとして処理する」以外のものです。あなたのXCode環境に設定されているようです。 XCodeでこのオプションを見つける方法についてはthis threadを見てください。

+0

ありがとうございました。上記のソースは、ヘッダファイル内のクラスに存在します。それを使用していませんでしたが、私はその機能を使用するとエラーが発生します。私はerorrがvsで発生したい、この機能が使用されていなくても(他の人も同じミスを犯しています。出来ますか??? –

+0

ライブラリではなく、自分のコードを所有しています。 vsバージョンは2012です。 –

+0

あなたはどのバージョンのVSを使用していますか?私のVS2015ではエラーです。 –

1

異なるコンパイラによって異なることが警告されます。 この場合、関数が値を返す必要があるため、エラーまたは警告が実際に発生するはずです。

g ++に-Wallまたは-Wreturn-typeフラグを追加すると、警告が表示されます。 ビルド設定 'Mismatched Return Type'の値を調整することで、Xcodeで同等の処理を実行できます。 3つの設定があります。

  1. はい - いいえ
  2. を警告しない -
  3. はい(エラー)を無視する - 添付のスクリーンショットを参照してくださいエラー

として扱います。

Xcode option

それは少なくとも設定警告する時にそれを残すのがベストだろうように、このオフにすると、他のエラーが不足しているあなたにつながるかもしれません。

+0

@性正민問題が解決した場合は、正解を選択してください。その他の問題がある場合は、私たちに知らせてください。ユーザーがオープンな質問に集中できるようになるため、これも役立ちます。ありがとうございました – ccpgh

+0

ありがとう!しかし、私はより重要なビジュアルスタジオは、エラーを解決するよりもエラーが発生すると思う。ソースの上のソースと悪い状況のためです。だから、私は対でエラーが発生する必要があります:) –

関連する問題