Xcode 3.1コンパイラにifステートメントで代入演算子を警告させる方法は?
-
05-07-2019 - |
質問
ドキュメントとインターネットをできる限り検索しようとしましたが、ifステートメントで代入演算子が使用されている場合、Xcodeコンパイラに警告を発行させることができませんでした。
RealBasicから来ました。この種の比較を入力するという非常に強い習慣があります:
if x = 5 then ...
Cでは、もちろん、この構文はxに5の値を割り当ててから、結果がゼロでないかどうかをテストし、「正しい」演算子は:
if (x == 5) { ... }
if比較で割り当てが行われた場合にコンパイラが警告できるはずであるという言及をいくつか見つけましたが、Xcode 3.1 / gccでそれをオンにする方法を見つけることができません。 -pedantic
オプションを見つけましたが、警告が生成されなかったようです。
かなりの時間を2回費やして以来、" ="と判明したバグを追跡しています。 " =="の代わりに、警告が必要です。
代わりにこれを実行できることを知っています(コンパイラエラーが発生します):
if (5 = x) { ... }
...しかし、それには根深いコーディング習慣の変更も必要です。不器用で後方に見えることは言うまでもありません。
ありがとう!
解決 2
ennuikillerの答えのリンクは、私が必要なものにつながりました。
今後これを見つけるかもしれない人のためにもう少し情報があります:
-
コンパイラの警告は、「括弧と括弧がありません」、または-Wparenthesesです。
-
現在の情報を取得を選択すると、警告がオンになります Xcodeのターゲット。
-
やっとわかったように、iPhone Simulator SDKは not を表示しません このコンパイラオプション。
-
SDKをiPhoneデバイスに切り替えると、GCC 4.2の警告が表示されます セクション、" Missing 中括弧と括弧"。
-
iPhoneデバイスSDKでそのオプションをオンにした後、元に戻す シミレーターへの "ユーザー定義"ビルド設定は 追加:
GCC_WARN_MISSING_PARENTHESES
= " YES"。 -
ifステートメントで本当に割り当てが必要な場合、次のことができます。 警告を回避するために括弧を2倍にします。
(二重括弧の例:)
if ((x = 5)) { ... }
警告はチャームのように機能しますが、Appleの標準を嫌います:
if (self = [super init]) { ... }
おそらくそれらをそのままにしておきますが、プロジェクトで膨大な量になった場合は、括弧を2倍にするか、割り当てを別の行に分割します。
ありがとう!
他のヒント
私が思うに-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でオプションを有効にする方法を説明しています