在c中自动铸造(或不是?)

Aar*_*ken 1 c casting

我正在尝试从Ruby/PHP/Java背景中学习C,并且我发现你几乎总是明确地投射东西(至少在教程中).就像,我总是看到类似的东西

double x, y;
x = 1.0; 
/*...*/
y = x*5.0;
Run Code Online (Sandbox Code Playgroud)

但是,似乎在我的Mac版本的GCC上,自动投射工作.

将.0留在事物上只是风格问题,还是做一些C编译器而不是自动播放?

dra*_*ard 8

常量具有分配给它的类型:

int i = 1;
double x = 2; // 2.0
Run Code Online (Sandbox Code Playgroud)

显式演员:

i = (int)x;
x = (double)i;
Run Code Online (Sandbox Code Playgroud)

隐式演员:

i = x;
x = i;
Run Code Online (Sandbox Code Playgroud)

型号促销:

x = i / 2.0; // i is promoted to double before being multiplied
x = (double)i / 2.0; // so evaluates as this
Run Code Online (Sandbox Code Playgroud)

VS

x = i / 2; // i is not promoted because 2 is an int
x = (double)( i / 2 ); // so evaluates as this
Run Code Online (Sandbox Code Playgroud)