2011-04-16 61 views
0

我寫了下面的C程序:在小型模塊化C程序中導致此編譯器錯誤的原因是什麼?

#include <stdio.h> 

int num1, num2; 
int sum(int, int); 

int main(void); 
{ 
    printf("Enter two numbers:"); 
    scanf("%d %d", &num1, &num2); 
    sum(num1, num2); 
    return 0; 
} 

int sum(int a, int b) 
{ 
    int res; 
    res = a + b; 
    return res; 
} 

但它會產生以下編譯器錯誤:

prog.c:5: error: expected identifier or ‘(’ before ‘{’ token

什麼可能會造成這個錯誤,我怎麼能解決這個問題?

回答

0

int main(void);從該行刪除;

+0

不,但我會得到一些其他的錯誤,我的程序沒有運行 – Sudheendra 2011-04-16 06:16:16

+0

@Sudheendra刪除後編譯罰款。另一位回答者在說你沒有把你的總和寫入一個變量或輸出它時是正確的。 – jonsca 2011-04-16 06:20:19

0

嘗試int main(void)替換int main(void);(無「;」)

10

分號的main函數的聲明之後:

int main(void); 

正由編譯器解釋爲標識該函數的末尾。由於分號存在,它不知道如何處理該函數聲明後的代碼塊。這是什麼compliation錯誤是告訴你:

prog.c:5: error: expected identifier or ‘(’ before ‘{’ token

它不知道做什麼用分號令牌,這表明一個語句的結束後到來的{做。

刪除分號是簡單的解決方案;重寫你的主要功能如下:

int main(void) 
{ 
    printf("Enter two numbers:"); 
    scanf("%d %d",&num1,&num2); 
    sum(num1,num2); 
    return 0; 
} 

至於在評論中提出了這個問題:

see when i run the output it asks for entering two numbers and doesnot show any sum result ??

啊,這是一個完全不同的問題。該代碼在語法上是正確的,所以你不會再有任何編譯錯誤,但它有一個邏輯錯誤!你從來沒有告訴電腦打印這兩個數字的總和到屏幕上。您需要插入另一個printf聲明,就像您擁有的第一個聲明一樣。但是這一次,您要打印由sum函數返回的值。

最終的代碼可能是這個樣子:

int main(void) 
{ 
    printf("Enter two numbers:"); 
    scanf("%d %d",&num1,&num2); 
    printf("%d\n", sum(num1, num2)); 
    return 0; 
} 
+0

+1的解釋 – 2011-04-16 06:17:17

+3

@Demian:這是我發佈答案的唯一原因,而不是簡單地提高你的答案。你先說得對,但你沒有解釋原因。解決這個問題肯定是值得的,但解釋值得更多! – 2011-04-16 06:18:08

+0

@Cody,你是對的。我刪除我的和你的+1。 – Muggen 2011-04-16 06:18:39

0

有原型的main後分號:

int main(void); 

因此,有沒有在你的程序main定義:

int main(void) { /* */ } 

編譯器期待或者函數名稱或結構名稱放在'{'之前。

相關問題