在循环中定义数据类型

O_O*_*O_O 1 c

这似乎是一个简单的问题,但对我来说并不直观.

假设你有一个这样的循环:

int i;
for(i=0;i<10;i++){
float b = 25.2;
float c;
c=b+i;
}
Run Code Online (Sandbox Code Playgroud)

在每个循环中将b定义为float是否会产生任何负面影响?我认为它会有,但我不太确定,因为我看到的代码适用于此...

谢谢...

mvd*_*vds 5

这是完全可以的,事实上,如果你只使用float循环内部,我认为在任何体面的编译器中都不重要.

将代码清晰度放入循环中确实有意义,但这主要是品味问题.

但要注意像这样的情况

int i,j;
for ( i=0;i<count;i++ )
{
    int j;
    // stuff
}
Run Code Online (Sandbox Code Playgroud)

我已经看到类似的情况不会生成编译器警告,这使得难以跟踪错误.

编辑刚测试,gcc编译方式不同,但-O3生成的程序集是相同的.测试用gcc -S file.c.更新:-O1已经足够了,它实际上取决于您声明变量的顺序.如果在您的示例中float声明如下int i;,则编译的程序集仍然是相同的.