不注意な「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では有効になりません)。
メーリングリストの議論で表現された理論的根拠は、次のようなもののようです。
-Wextra
が指定されている場合、C ++ 11で有効にする必要-Wextra
があるため、を意味し-Wimplicit-fallthrough
ます。ただし、フロントエンドは-Wextra
、C ++ 11モードであるかどうかに応じて異なるオプションを暗示することをサポートしていません。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加