4

XCode(4.5、4G182)にスイッチ/ケース構造でケースを完成させ、欠落しているケースについて警告するにはどうすればよいですか?

例えば:

for (int i=0;i<[flat elementCount];i++) {
    NSPoint elements[3];
    NSBezierPathElement elem=[flat elementAtIndex:i associatedPoints:elements];
    switch (elem ) {
        case NSMoveToBezierPathElement: break;
        case NSLineToBezierPathElement: break;
        case 

私は過去にこれを見たことがあります。また、ブロックが閉じられると、欠落しているケースについて警告しました。XCode 4.5をどのように実現できますか?

編集:Switchステートメントが有効になっていることを確認してください。警告はありません。

完了が機能する小さな例を次に示します。

typedef enum  {
    kThisCase = 0,
    kThatValue = 1,
    kLastOne = 2
} myEnum;

myEnum var= kLastOne;

switch (var) {
    case kThatValue: break;
    case kLastOne: break;
    case 

CTRL+SPACEここでmyEnumの残りの可能な値を取得します

完了は機能しています 完了が機能していません

NSBezierPathElementの完了の場合、これを追加すると次のようになります。

typedef enum {
    NSMoveToBezierPathElement,
    NSLineToBezierPathElement,
    NSCurveToBezierPathElement,
    NSClosePathBezierPathElement
} NSBezierPathElement;

(クイックヘルプパネルからコピー)スイッチを作成する前は、オートコンプリートは機能しますが、警告は機能しません。

NSBezierPath.hのコンテンツ

enum {
    NSMoveToBezierPathElement,
    NSLineToBezierPathElement,
    NSCurveToBezierPathElement,
    NSClosePathBezierPathElement
};
typedef NSUInteger NSBezierPathElement;

完了が機能しない理由ですか?この列挙型はNSBezierPathElementのタイプであると想定されていませんか?

これはクイックヘルプパネルとは一致しません。クイックヘルプパネルには、次のようなものがあります。typedef enum { NSMoveToBezierPathElement, NSLineToBezierPathElement, NSCurveToBezierPathElement, NSClosePathBezierPathElement} NSBezierPathElement;

4

1 に答える 1

3

デフォルトで有効になっているコンパイラ設定が必要です。ビルド設定で「case」を検索し、「Check Switch Statements」という名前 (タイトル) を検索します。これは GCC_WARN_CHECK_SWITCH_STATEMENTS です。

これには、列挙型が NSInteger などとしてではなく、実際に正しく定義されている必要があると思います。定数が列挙型ではなく整数である場合、コンパイラは整数が関連していることを認識していないため、チェックは役に立ちません。

また、非常に重要なことですが、default: 句を削除してください。そこにある場合は、このケースで欠落しているすべてのケースを暗黙的に処理しているため、警告はトリガーされません!

于 2012-09-25T10:04:41.260 に答える