C语言中变量定义的位置(C89和C99的区别)
在C++和JAVA中,按照语法,我们可以把变量定义在任何位置,所以很多人习惯了“哪里使用哪里定义”的这种做法,所以当用C语言进行编程的时候,很多人依然想这样去做。当然,对于变量定义的位置,C89和C99是有一定的差别的,也就是和大家使用的编译器有关。
如果大家使用较老的编译器时遇到下面的代码可能会提示错误,因为较老的编译器要求.c文件中的局部变量定义必须放在所有执行语句前,块开头处。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
int i = 0; // c89和C99都没问题
if (i > 0)
{
int j = 0; // C89和C99都没问题
}
for (int k = 0; k < 5; ++k) // C89有问题,C99正常
{
i = k;
printf("i = %d.\n", i);
}
int m = 0; // C89有问题,C99正常
}
上面的程序如果在较老的编译器下使用.c文件保存并编译的时候会出错,注意,i、j的定义是没有任何问题的,因为它们都处于局部块的开始处。但是k和m的定义就会有问题,因为它们前面有可执行语句,所以m和k应该定义在i的前后。我当时使用VS2008的时候会报错,但是现在使用VS2013编译上面程序时不会有任何问题,所以,这个使用方法到底对不对,还是要看大家的编译器,C99以后基本都使用变量就近定义的方式,因为这样十分清晰。
总之,为了移植性更强一些,建议大家编写C语言的时候尽量将局部变量都定义在可执行语句前,块的开始处,这样不管是新的编译器或者老的编译器都可以正常编译。不过,随着变量定义就近原则的方便性的体现,可能使用变量就近定义会更好一些,至于如何抉择,大家可以根据项目需求和实际的情况而定。