代码位置不同为什么会报错?【C语言基础问题】

gets()语句放在第8行会报错,第10行就不会报错,菜鸟不明白是怎么回事了,求解。
代码如下:

 # include <stdio.h>
# include <string.h>

int main()
{
    char string[100];
    char c;
    gets(string);
    int i, num = 0, word = 0;
    //gets(string);
    for(i = 0; (c = string[i]) != '\0'; i++)
    {
        if(c == ' ') word = 0;
        else if(word == 0)
        {
            word = 1;
            num++;
        }
    }
    printf("%d", num);
    return 0;
}

报错提示如下:
--------------------Configuration: 25 - Win32 Debug--------------------
Compiling...
25.c
F:\Microsoft Visual Studio\mine\25.c(9) : error C2143: syntax error : missing ';' before 'type'
F:\Microsoft Visual Studio\mine\25.c(11) : error C2065: 'i' : undeclared identifier
F:\Microsoft Visual Studio\mine\25.c(13) : error C2065: 'word' : undeclared identifier
F:\Microsoft Visual Studio\mine\25.c(17) : error C2065: 'num' : undeclared identifier
执行 cl.exe 时出错.

25.obj - 1 error(s), 0 warning(s)

c89标准:
c语言局部变量声明只能在函数最前面
c99:
此限制取消
VS对c的标准支持不好,换gcc编译器或者把文件改成cpp

我两边都不报错,你再把代码检查一下是不是打错了,或者clean一遍。

变量声明必须在当然程序块的前面,也就是大括号所包含的块最开始

还是不明白,请大神解释一下==

C语言变量声明位于函数或过程的开始位置,即你得先说明你有哪些变量,才能开始执行操作

变量的声明在C中是必须要放在最前面的,我知道的JAVA和C++没有这个要求

我的编译没问题,应该是你的编译器按C89来的,太老了。。。