C程序中的奇怪错误

时间:2012-11-20 09:36:17

标签: c

仅当我在C文件(非CPP)中工作时才会出现此错误

我在处理一些opengl示例时遇到了一个非常奇怪的错误,我把它缩小到下面的代码,这会产生我得到的相同错误,找不到类型

#include "stdlib.h"
void Initialize(int, char*[]);

void main()
{
}

void Initialize(int argc, char* argv[])
{
    int i;
    for(i = 10; i>0;i--)
    {
        int j=0;
        j = j+2;
        int GlewInitResult2;
    }
}

我使用了visual studio 2008,OS:windows xp

无法理解为什么会这样?这是一个编译器错误吗?

(顺便说一句,如果我将文件保存为.CPP文件,它编译得很好)

3 个答案:

答案 0 :(得分:4)

您在声明后有声明。在较新版本的C(如C99)中,你可以拥有它,但在旧版本中你不能。微软的C编译器很老了。在C ++中它没关系,这就是它构建的原因。

答案 1 :(得分:2)

Microsoft编译器仅支持C89,因此声明和代码不能混用。这在C ++中是允许的。当源文件具有.c扩展名时,它被视为C源,当它具有.cpp时,它被视为C ++。

要更正C,请将所有变量声明放在要使用它们的范围的开头。

答案 2 :(得分:2)

据我所知,Visual Studio 2008并不完全符合c99标准。

c99之前的标准中,您必须在程序开头声明变量。但是在c99中,变量的声明可以在函数的任何地方完成。

同样在c ++中没有这样的限制。在Windows中,当您创建扩展名为.cpp的文件时,它将被视为c ++文件。因此,当编译为cpp时,相同的程序可以工作。

解决方案:

  1. 在函数的开头声明您的变量。哪一个 也是一个很好的做法!
  2. 更改编译器! (查看this。没有编译错误!)