2011-06-11 89 views
-2

這裏是我的一段代碼未定義的引用變量i

#include<stdio.h> 
main() 
{ 
     extern int i; 
     i=20; 
    printf("%d",i); 
} 

當我編譯它,我得到錯誤

ka2.c: In function ‘main’: 
ka2.c:6: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘long unsigned int’ 
/tmp/ccGXrSE5.o: In function `main': 
**ka2.c:(.text+0x6): undefined reference to `i'** 
collect2: ld returned 1 exit status 

我想知道這是我加粗錯誤的線的原因。

+4

您認爲'extern'是什麼意思? – 2011-06-11 17:09:54

+1

警告與代碼不匹配。 -1爲假代碼。 – 2011-06-11 17:18:31

+0

@Rafe Kettler你使用了什麼編譯器我使用Ubuntu 64位和gcc版本4.4.3(Ubuntu 4.4.3-4ubuntu5) – 2011-06-11 17:55:23

回答

4

您已聲明i但尚未定義它,這就是連接器抱怨的原因。

+0

我= 20我已經定義了,所以我不清楚爲什麼它沒有采取,讓我知道,如果我錯過了一些事情。 – 2011-06-11 17:45:24

+1

@註冊用戶:這不是定義。這是任務。 – 2011-06-11 17:46:06

2

你宣佈我爲extern。刪除此關鍵字可解決此問題,因爲extern表示在另一個模塊中定義的內容

+0

其實我想明白爲什麼在上述類型的情況下使用extern是一個問題。我試圖改進我的C技巧,因此請讓我知道。謝謝 – 2011-06-11 17:53:52

+0

@註冊用戶:因爲extern是指在另一個模塊中定義的東西。鏈接器試圖在其他模塊中搜索此變量,但由於您沒有包含任何其他模塊,鏈接器未找到該變量併發出抱怨。 – BlackBear 2011-06-12 19:28:07