以下は、コンパイラが診断を発行する必要があると私が考える、明らかに欠陥のあるコードです。しかし、私が考えることができるすべての警告オプションを使用しても、そうではありませgcc
ん。g++
-pedantic -Wall -Wextra
#include <stdio.h>
short f(short x)
{
return x;
}
int main()
{
long x = 0x10000007; /* bigger than short */
printf("%d\n", f(x)); /* hoping for a warning here */
return 0;
}
gcc
これを作成してg++
警告する方法はありますか?余談ですが、デフォルトで、またはかなり一般的な特別な警告構成でこれについて警告する別のコンパイラがありますか?
注: GCC (C および C++ コンパイラの両方) バージョン 4.2.4 を使用しています。
編集:私はそれgcc -Wconversion
がトリックを行うことを発見しましたが、同じオプションg++
はそうではありません。ここでは実際にC++を使用しているため、解決策が必要ですg++
(そして、なぜそう-Wconversion
ではないのか疑問に思っています)。
編集: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34389g++ 4.4
は、これが...maybeで修正される可能性があることを示唆しています。それが同じ問題であるかどうか、および/または修正が実際にそのバージョンで行われるかどうかは、まだ明確ではありません. たぶん、4.3 または 4.4 の誰かが私のテスト ケースを試すことができます。