2011-06-17 55 views
1

我使用的是Visual Studio 2010,我試圖運行一個簡單的用C語言編寫的程序,但是當我F5的時候,我得到了大量的語法錯誤。幾乎所有的人都是因爲這一點:Visual Studio 2010在嘗試調試時給了我語法錯誤,但沒有語法錯誤!

syntax error: missing ';' before 'type'. 

這是我的主要功能的外觀:

你看
#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    printf("Enter base 10 num: "); 
    int value; scanf("%d", &value); 
    printf("Enter base floor (min 2): "); 
    int min; scanf("%d", &min); 
    printf("Enter base ceiling (max 10): "); 
    int max; scanf("%d", &max); 
    base_convert(value, min, max); 
    return 0; 
} 

第一個int值是12行,並在第12行報道VS2010的第一個錯誤,字符1,這是該int的位置。在收到報告的消息後,我錯過了一個「;」 (我顯然不是),它然後繼續告訴我,價值是未申報的。

我該如何解決這個問題?我知道我的程序實際上沒有語法(或任何)錯誤 - 這是之前編寫和測試的,可以在GCC編譯器上使用Ubuntu。

有人可以幫忙嗎?這是非常令人沮喪的:S

+0

你是否有在爲scanf的源文件的頂部適當的#includes? – Joe 2011-06-17 03:18:05

回答

5

ANSI C不允許在塊的中間定義變量 - 它們必須在塊的頂部定義。後來的C99標準刪除了這個限制(就像C++一樣),但Visual Studio不支持C99。

在頂部的變量聲明重寫你的函數:

int main() 
{ 
    int value, min, max; 
    printf("Enter base 10 num: "); 
    scanf("%d", &value); 
    printf("Enter base floor (min 2): "); 
    scanf("%d", &min); 
    printf("Enter base ceiling (max 10): "); 
    scanf("%d", &max); 
    base_convert(value, min, max); 
    return 0; 
} 

GCC,作爲擴展,允許在默認情況下,塊的中間被定義的變量。如果指定-pedantic命令行選項(不-std=c99),你會得到以下警告:

warning: ISO C90 forbids mixed declarations and code 
+0

那麼這是否意味着我必須在使用後釋放變量呢? – jayjyli 2011-06-17 03:32:21

+0

@Tim:什麼?編號在堆棧中分配的變量(帶有所謂的*自動存儲*)在函數返回時自動釋放。如果你用'malloc'(或者它的朋友'calloc'和'realloc',或者其他明顯的內存分配函數)分配它們,你只需要釋放變量。 – 2011-06-17 03:35:06

+0

哦,對不起,我誤解了你的答案。我以爲你的意思是需要在全球範圍內宣佈變量。感謝您的回答!! – jayjyli 2011-06-17 03:53:01

0

您是否嘗試過使用新項目重新啓動以確保您的項目沒有損壞。

+0

這本身就是一個新項目。我使用空的C++控制檯應用程序模板創建了這個模板。然後,我通過直接從Ubuntu中的原始文件複製代碼來製作C源文件。 – jayjyli 2011-06-17 03:27:38