2012-11-20 247 views
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

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

回答

4

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

+0

哦......非常感谢你:)所有 – bvm

2

微软编译器只支持C89这样的声明和代码不能混用(顺便说一句,如果我将文件保存为.cpp文件编译罚款)。这在C++中是允许的。当源文件具有.c扩展名时,它被视为C源,当它具有.cpp时,它被视为C++。

要纠正C将所有变量声明放置在它们将被使用的范围的开始处。

2

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

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

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

解决方案:

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