0

ドキュメントとインターネットをできる限り検索してみましたが、if ステートメントで代入演算子が使用されている場合に Xcode コンパイラに警告を発行させることができませんでした。

私は RealBasic 出身で、この種の比較をタイプする非常に強い習慣があります。

if x = 5 then ...

もちろん、C では、その構文は x に値 5 を代入し、結果がゼロでないかどうかをテストします。「正しい」演算子は次のとおりです。

if (x == 5) { ... }

if 比較で割り当てが行われた場合にコンパイラが警告できるはずであるという言及をいくつか見つけましたが、Xcode 3.1/gcc でそれを有効にする方法が見つかりません。オプションを見つけました-pedanticが、警告が生成されていないようです。

「==」ではなく「=」であることが判明したバグを追跡するのにかなりの時間を 2 回費やしたので、警告の助けが必要です。

代わりにこれを行うことができることを知っています(コンパイラエラーが発生します):

if (5 = x) { ... }

...しかし、それには、根深いコーディングの習慣も変える必要があります。不器用で後ろ向きに見えることは言うまでもありません。

ありがとう!

4

2 に答える 2

1

-Wall オプションを探していると思います。

int main(void) {

    int x = 5;
    if ( x=5) { 
    }
    return 0;
  }

$ g++ -pedantic x.cc 
$ g++ -Wall x.cc 
x.cc: In function ‘int main()’:
x.cc:7: warning: suggest parentheses around assignment used as truth value

このリンクは、Xcode GUI を介してオプションを有効にする方法を説明しています

于 2009-09-10T14:44:46.200 に答える
1

ennuikiller の回答のリンクは、私が必要としていたものにつながりました。

将来これを見つける可能性のある人のために、もう少し詳しい情報を次に示します。

  • コンパイラの警告は、「中括弧と括弧がありません」または -Wparentheses です。

  • Xcode で現在のターゲットの [情報を見る] を選択すると、警告がオンになります。

  • ようやくわかったのですが、iPhone Simulator SDK にはこのコンパイラ オプションが表示されません。

  • SDK を iPhone デバイスに切り替えると、「中括弧と括弧がありません」を含む GCC 4.2 警告セクションが表示されます。

  • iPhone デバイス SDK でそのオプションをオンにした後、シミュレーターに戻ると、「ユーザー定義」ビルド設定が追加されていることが示されます: GCC_WARN_MISSING_PARENTHESES= "YES"。

  • if ステートメントで代入が本当に必要な場合は、括弧を 2 つ使用して警告を回避できます。

(二重括弧の例:)

if ((x = 5)) { ... }

警告は魅力のように機能しますが、Apple の標準は嫌いです。

if (self = [super init]) { ... }

私はおそらくそれらをそのままにしておくでしょうが、もしプロジェクトにそれらが大量にある場合は、括弧を二重にするか、割り当てを別の行に分割します.

ありがとう!

于 2009-09-10T15:47:05.993 に答える