有一个很简单的关于变量定义位置的问题

这段代码一直报错

#include<stdio.h>
#include<math.h>
int main()
{
    FILE *p1;
    p1=fopen("table.txt","w");
    if(p1==NULL) printf("error");
    fprintf(p1,"Nubmer\tSquare\tSquare root\n");
    fprintf(p1,"-----------------------------------------------\n");
    int i;                                                                                                         \\int i 在这里
    for(i=0;i<100;i++)
        fprintf(p1,"%5d\t%5d\t%2.3f\n",i+1,(i+1)*(i+1),sqrt(1.0*(i+1)));
    return 0;
}

找了半天问题最后换一下int i的位置后就好了

#include<stdio.h>
#include<math.h>
int main()
{
    int i;                                                                                          \\在这里
    FILE *p1;
    p1=fopen("table.txt","w");
    if(p1==NULL) printf("error");
    fprintf(p1,"Nubmer\tSquare\tSquare root\n");
    fprintf(p1,"-----------------------------------------------\n");
    for(i=0;i<100;i++)
        fprintf(p1,"%5d\t%5d\t%2.3f\n",i+1,(i+1)*(i+1),sqrt(1.0*(i+1)));
    return 0;
}

按照这个思路发现结构体的定义不放在最顶端也会出错。但是不管放在哪里都是在他们被调用之前定义的啊?为什么会出错呢?

这可能设置到C语言的版本问题
如果按旧的c语言标准(C89)确实是,函数内部使用的变量必须定义在开头
C99标准支持随处定义变量,因此不受限制,不过由于支持新标准的C编译器太少,为了保持程序的可移植性,还是按旧标准把局部变量定义在每个函数的开头好了