2014-04-11 44 views
1

我只是C編程中的新手,我正在嘗試學習該語言。但是當我編譯代碼時,我使它顯示錯誤"FuncA was not declared in this scope"。但我已經嘗試在下面聲明這個函數。FuncA未在此範圍內聲明C編程錯誤

#include<stdio.h> 

int main(){  
    int A = 1; 
    FuncA(A); 
    printf("%d\n");  
} 

int FuncA(int B){ 
    B++;   
    return B++; 
} 

對不起這個問題。

+1

'返回b ++''那裏是B'按值傳遞是怪異 – Arun

+2

使用'的printf(「%d \ n「);'是未定義的行爲;你應該傳遞一個int值來打印。忽略'FuncA'返回的結果會影響調用'FuncA'的目的。也許你有'A = FuncA(A);',或者你想'printf(「%d \ n」,FuncA(A));'。 'FuncA'的返回後增量是無意義的副作用。編譯器甚至可能會在啓用適當警告的情況下警告有關這些問題。 –

回答

2

你需要把它的聲明:

int FuncA(int B); 

main()之前。

或者,您可以在函數定義後移動main()


P.S.:作爲@JonathanLeffler評論的,printf("%d\n")undefined behavior

如果任何參數不是由相應的轉換指定期望的類型,或者如果存在多於所需的由格式更少參數,則行爲未定義。如果有更多的參數不是格式要求的參數,則會評估和忽略無關的參數。

你可能想這樣的:

printf("%d\n", FuncA(A)); 
+0

或者移動'main()'上面的函數。 –

+0

@JonathanLeffler添加到答案。謝謝。 – herohuyongtao

1

在點時​​被調用,它尚未由編譯器知道。

移動功能,如下所示:

int FuncA(int B){ 
     B++;  
     return B++; 
} 

int main(){ 

    int A = 1; 
    A = FuncA(A); 
    printf("%d\n", A); 
} 

另外請注意,您在printf指定要打印一個整數%d,但你不要傳遞一個。我上面的代碼已經修復了。

而且你可能想做一些與​​返回值,我賦予它A.

+0

或者在'main()'之前放置函數聲明。 –

+0

請注意'printf()'是假的 - 在原文中和您的答案中。 –

+0

@JonathanLeffler啊正確的感謝,我編輯 – thumbmunkeys