1

次のスニペットを検討してください。

short x = 2000000000;

short x = (short)2000000000;

int x = 1000000000 * 1000000000;

Clang でこれらの警告 (/エラー) を受け取ることはできますか? どのように?どのバージョンから始めますか?

ありがとう、シプリアン。

4

1 に答える 1

2

少なくとも、clang 3.3 の時点では、次のことを試みなくても、両方のケースで警告が表示されます。

/* main.c */
short x = 2000000000;
int y = 1000000000 * 1000000000;

int main()
{
    return 0;
}

コンパイル:

$ clang -c main.c
main.c:1:11: warning: implicit conversion from 'int' to 'short' changes value
      from 2000000000 to -27648 [-Wconstant-conversion]
short x = 2000000000;
      ~   ^~~~~~~~~~
main.c:2:20: warning: overflow in expression; result is -1486618624 with type
      'int' [-Winteger-overflow]
int y = 1000000000 * 1000000000;
                   ^
2 warnings generated.
于 2014-01-13T16:22:32.490 に答える