Назначить двойную константу переменной с плавающей запятой без предупреждения в C?

В языке программирования C константа с плавающей запятой по умолчанию имеет тип double
так что 3.1415 - это двойной тип, если только не используется суффикс 'f' или 'F' для обозначения типа с плавающей точкой.

Я предполагаю, что const float pi = 3.1415 вызовет предупреждение, но на самом деле нет.

когда я пробую их в gcc с -Wall:

float f = 3.1415926;  
double d = 3.1415926;  
printf("f: %f\n", f);  
printf("d: %f\n", d);  
f = 3.1415926f;  
printf("f: %f\n", f);  
int i = 3.1415926;  
printf("i: %d\n", i);  

, результат будет следующим:

f: 3.141593  
d: 3.141593  
f: 3.141593  
i: 3

результат (включая двойную переменную) явно теряет точность, но компилируется без какого-либо предупреждения.
так что же с этим сделал компилятор? или я что-то неправильно понял?

7
задан OnTheEasiestWay 30 June 2011 в 17:34
поделиться