1

仅当我在 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,操作系统:windows xp

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

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

4

3 回答 3

4

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

于 2012-11-20T09:39:44.860 回答
2

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

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

于 2012-11-20T09:39:24.303 回答
2

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

在标准中,c99您必须在程序开始时声明您的变量。但是在c99函数的任何地方都可以声明变量。

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

解决方案:

  1. 在函数的开头声明你的变量。这也是一个好习惯!
  2. 改变你的编译器!(看看这个。没有编译器错误!)
于 2012-11-20T09:44:19.613 回答