2012-03-07 43 views
1

更新外部變量我有這些文件如何在C

test1.h

extern int value; 
void inc_value(); 
int print_value(); 

test1.c

#include "test1.h" 

int value=0; 
void inc_value() 
{ 

printf("inc value from test3.c = %d\n", value++); 
} 

int print_value() 
{ 

    printf(" value in test1.c = %d\n", value); 
    return value; 
} 

test3.c

# include "test1.h" 

main() 
{ 

inc_value(); 

} 

test4.c

# include <stdio.h> 
#include "test1.h" 

main() 

{ 
    printf("value from test4 = %d\n", print_value()); 
} 

我從test3.c更新變量 「值」,並試圖從test4.c閱讀。然而test3.c無法更新「價值」,也就是在test1.h聲明並在test1.c

我在這裏缺少什麼點定義..

+0

你有兩個'main's? O'rlly? – 2012-03-07 10:00:01

+0

是第一次我調用TEST3更新的價值,後來TEST4打印更新值 – marc 2012-03-07 10:03:18

+0

這是兩個單獨的應用程序?你讓我今天很開心。 – 2012-03-07 10:06:01

回答

5

這不會有任何效果。

你不能從兩個不同的程序使用外部變量,並神奇地期望它的工作。這只是......錯了。每個程序都在自己的地址空間中運行,並且不知道任何其他進程的地址空間。有這樣做的技術(查找進程間通信),但這是一個完全不同的領域。

extern的工作方式是,它允許您訪問在同一個程序內的不同C文件中定義的變量

你似乎是錯誤的理解,在一個相當基本的水平,你正在編寫工作和執行,因爲你認爲這種工作程序如何。我建議閱讀關於C如何工作的更多信息,也可能稍微介紹一下操作系統如何託管程序以運行它們。

像你所描述的程序之間共享信息的一種方式是將數據存儲在一個文件中,該文件由一個程序(先運行的程序)編寫並由另一個程序讀取,但這很難實現也是。

+0

在這種情況下,是否有任何其他方式可以從test3.c更新「通用」變量,然後使用來自「test4.c – marc 2012-03-07 10:13:20

+2

@suzanne」的更新變量您需要這就是所謂的IPC,即進程間通信。您應該嘗試尋找其他解決方案,因爲IPC遠遠超出了當前的專業水平。 – 2012-03-07 10:35:49

0

如果你想打電話void inc_value()從另一個文件,你應該聲明它(可能在頭):

void inc_value(); 

如果你想直接訪問value,就可以了,因爲它被聲明爲一個外部:

# include "test1.h" 
main() 
{ 
    value = 6; 
} 

還要注意的是,在當前的實現的inc_value,該值將被它被傳遞給printf後遞增,例如打印的值將是前一個值。

+0

是的,我忘了在這裏添加。但是我在頭文件中聲明瞭函數。 – marc 2012-03-07 10:01:26

+0

是的,我可以從test3.c更新,但仍然從test4讀取的是在第一次運行test3時返回「0」而不是「1」 test4 – marc 2012-03-07 10:08:11