Рассмотрим следующие фрагменты:
short x = 2000000000;
short x = (short)2000000000;
int x = 1000000000 * 1000000000;
Можем ли мы получить предупреждение (/ошибку) для них в Clang? Как? Начиная с какой версии?
Спасибо, Киприан.
Рассмотрим следующие фрагменты:
short x = 2000000000;
short x = (short)2000000000;
int x = 1000000000 * 1000000000;
Можем ли мы получить предупреждение (/ошибку) для них в Clang? Как? Начиная с какой версии?
Спасибо, Киприан.
По крайней мере, начиная с 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.
$ clang -c main.c
— это команда компиляции. Предупреждающих флагов нет. (short) 2000000000
не вызовет предупреждения о неявном преобразовании, потому что преобразование в этом случае является явным: приведение означает Просто сделайте это.
- person Mike Kinghan; 21.01.2014