2012-11-20 277 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。沒有編譯器錯誤!)