我在Windows上使用GCC 4.9.2并且注意到它没有警告从double转换为int,而visual studio编译器确实:
代码:
int main()
{
int celsius, fahrenheit, kelvin;
celsius = 21;
fahrenheit = celsius * 9 / 5 + 32;
kelvin = celsius + 273.15; //here it should warn!
printf("%d C = %d F = %d K",
celsius, fahrenheit, kelvin);
return 0;
}
我编译使用:
gcc hello.c -Wall -Wextra -pedantic -std=c99
我使用visual studio编译器编译了相同的代码:
C:\temp>cl hello.c /nologo /W4 /FeC2f.exe
hello.c
hello.c(14): warning C4244: '=': conversion from 'double' to 'int', possible loss of data
我做错了什么?
答案 0 :(得分:6)
您需要使用-Wconversion标记,gcc
警告:
warning: conversion to 'int' from 'double' may alter its value [-Wconversion]
kelvin = celsius + 273.15; //here it should warn!
为什么没有使用-Wall
或-Wextra
启用它,链接的维基中包含以下内容:
隐含转换在C中非常常见。这与事实相关 前端没有数据流(见下一个问题)结果 很难避免完美工作和有效代码的警告。 Wconversion专为一系列用途而设计(安全审计,移植) 程序员愿意接受的32位代码到64位等 和解决方法无效警告。因此,如果不应该启用它 没有明确要求。