clangがスイッチのフォールスルーを検出しない

マリポサのビル・エヴァンス

不注意な「switch」ステートメントのフォールスルーをclangでキャッチしたい。このシェルスクリプトは私の失敗を示しています。スクリプト自体の後に出力を表示します。私は何が間違っているのですか?

#!/bin/sh

cat <<EOD > 1.c
#include <stdio.h>
int main(void)
{
  int etwas=5;
  switch(etwas)
  {
    case 5:
    {
      printf("It's 5.\n");
    }
    case 6:
    {
      printf("It's 6.\n");
    }
    default:
    {
      printf("It's something else\n");
      break;
    }
  }
  return 0;
}
EOD

rm -f 1
clang --version
echo === demonstrating that unrecognized warning names are not allowed ===
clang -Wnonsense-warning -Werror -Wall 1.c -o 1
echo === The real compile follows. ===
clang -Wimplicit-fallthrough 1.c -o 1
echo === The execution follows. ===
./1

出力:

FreeBSD clang version 4.0.0 (tags/RELEASE_400/final 297347) (based on LLVM 4.0.0)
Target: x86_64-unknown-freebsd11.1
Thread model: posix
InstalledDir: /usr/bin
=== demonstrating that unrecognized warning names are not allowed ===
error: unknown warning option '-Wnonsense-warning'
      [-Werror,-Wunknown-warning-option]
=== The real compile follows. ===
=== The execution follows. ===
It's 5.
It's 6.
It's something else
んん

明らかに、これは意図的な設計上の決定で-Wimplicit-fallthroughあり、C ++ 11モードでのみ有効になります(CモードやC ++ 03では有効になりません)。

メーリングリストの議論で表現された理論的根拠は、次のようなもののようです。

  1. 彼らは、Cコーダーを煩わせるため、Cでデフォルトで有効にすることを望んでおらず、(C2xより前は)コードの意図的なフォールスルーを示す合意された方法がありませんでした。
  2. -Wextraが指定されている場合、C ++ 11で有効にする必要-Wextraがあるため、を意味し-Wimplicit-fallthroughます。ただし、フロントエンドは-Wextra、C ++ 11モードであるかどうかに応じて異なるオプション暗示することをサポートしていません。
  3. (1)と(2)を実現する最も簡単な方法は、Cで完全に無効にすることです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

NetBeans8.2インストーラがDebianのフォルダ内のOpenJDKを検出しない

分類Dev

clang / clang ++がiostream.hやstdio.hなどの標準ヘッダーファイルを検出しない

分類Dev

ReactJS:Formikマルチステップフォームを使用したYupで検証が機能しない

分類Dev

マルチステップフォームでフォーム検証が機能しない

分類Dev

フォームの送信後、チェックボックスのスタイルが機能しない

分類Dev

FirefoxがJavaインストールを検出しない

分類Dev

Gulpがサブフォルダー内のファイルの変更を検出しない

分類Dev

Javaがインストールされているバッチファイルから検出しますか?

分類Dev

スイッチ ケースのフォールスルーの Intellij 検査

分類Dev

Eclipseがインストール済みのJavaを検出しない

分類Dev

AndroidStudioがインストール済みのjdkを検出しない

分類Dev

TypeOfオブジェクトがExcelvbaユーザーフォームでラベルとテキストボックスを検出しない

分類Dev

マルチステップ フォームでの oauth ログインが機能しない

分類Dev

ポッド依存関係マネージャーがインストールに必要なモジュールを検出しないのはなぜですか?

分類Dev

Alexaスキルキットのフォールバックインテントが呼び出されない

分類Dev

マルチステップの連絡フォームでラジオボタンが検証されない

分類Dev

負のサイクルを検出しない隣接行列のベルマンフォード単一ソース最短経路

分類Dev

アプリをGoogle Cloudプラットフォームにデプロイすると、相対ファイルパスが検出されない

分類Dev

Jacocoがインターフェースを検出しない

分類Dev

フォームがファイルを送信しない/未定義のインデックス:FileInput-PHP / AJAX / jQuery

分類Dev

Javascript フォームの検証がブートストラップ モーダルで機能しない

分類Dev

ライブラリインクルードがインクルードパスのヘッダーを検出しない

分類Dev

Ubuntu-デフォルトのJava、Oracle JDKがインストール済みとして検出されない

分類Dev

デフォルトのJavaがインストール済みとしてMavenによって検出されない

分類Dev

アプリにフォーカスがない場合のJavaのイベントリスナー?(グローバルキープレス検出)

分類Dev

パーセルウォッチは最初のファイル変更のみを検出します

分類Dev

Whileループがテキストファイルの最初の行を検出していません

分類Dev

Ubuntuがオフィスのワイヤレスネットワークを検出しない

分類Dev

バッチでIFステートメントを使用して、名前にスペースがある/ないフォルダーの存在を確認する

Related 関連記事

  1. 1

    NetBeans8.2インストーラがDebianのフォルダ内のOpenJDKを検出しない

  2. 2

    clang / clang ++がiostream.hやstdio.hなどの標準ヘッダーファイルを検出しない

  3. 3

    ReactJS:Formikマルチステップフォームを使用したYupで検証が機能しない

  4. 4

    マルチステップフォームでフォーム検証が機能しない

  5. 5

    フォームの送信後、チェックボックスのスタイルが機能しない

  6. 6

    FirefoxがJavaインストールを検出しない

  7. 7

    Gulpがサブフォルダー内のファイルの変更を検出しない

  8. 8

    Javaがインストールされているバッチファイルから検出しますか?

  9. 9

    スイッチ ケースのフォールスルーの Intellij 検査

  10. 10

    Eclipseがインストール済みのJavaを検出しない

  11. 11

    AndroidStudioがインストール済みのjdkを検出しない

  12. 12

    TypeOfオブジェクトがExcelvbaユーザーフォームでラベルとテキストボックスを検出しない

  13. 13

    マルチステップ フォームでの oauth ログインが機能しない

  14. 14

    ポッド依存関係マネージャーがインストールに必要なモジュールを検出しないのはなぜですか?

  15. 15

    Alexaスキルキットのフォールバックインテントが呼び出されない

  16. 16

    マルチステップの連絡フォームでラジオボタンが検証されない

  17. 17

    負のサイクルを検出しない隣接行列のベルマンフォード単一ソース最短経路

  18. 18

    アプリをGoogle Cloudプラットフォームにデプロイすると、相対ファイルパスが検出されない

  19. 19

    Jacocoがインターフェースを検出しない

  20. 20

    フォームがファイルを送信しない/未定義のインデックス:FileInput-PHP / AJAX / jQuery

  21. 21

    Javascript フォームの検証がブートストラップ モーダルで機能しない

  22. 22

    ライブラリインクルードがインクルードパスのヘッダーを検出しない

  23. 23

    Ubuntu-デフォルトのJava、Oracle JDKがインストール済みとして検出されない

  24. 24

    デフォルトのJavaがインストール済みとしてMavenによって検出されない

  25. 25

    アプリにフォーカスがない場合のJavaのイベントリスナー?(グローバルキープレス検出)

  26. 26

    パーセルウォッチは最初のファイル変更のみを検出します

  27. 27

    Whileループがテキストファイルの最初の行を検出していません

  28. 28

    Ubuntuがオフィスのワイヤレスネットワークを検出しない

  29. 29

    バッチでIFステートメントを使用して、名前にスペースがある/ないフォルダーの存在を確認する

ホットタグ

アーカイブ