2013-10-16 136 views
1

嗨,我只是想知道如何在.c文件之間共享全局變量。
我嘗試添加後續代碼,但仍然出現錯誤。在.c文件之間共享全局變量

test1.c文件

#include <stdio.h> 

int max = 50; 
int main() 
{ 
    printf("max %d", max); // result max 50 
} 

pass.h

extern int max; 

passed.c

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

max; 

int main() 
{  
    printf("pass %d \n", max); 

    return 0; 
} 

但是,當我編譯passed.c我得到遵循錯誤

Undefined symbols for architecture x86_64: 
"_max", referenced from: 
    _main in passed-iOMugx.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

任何人都可以幫忙嗎?非常感謝。

+0

您是否真的有兩個main()函數? –

+0

爲什麼你有兩個主要功能?它們是單獨的程序,還是它們要連接成一個程序?如果他們在一個程序中被連接在一起,它不應該抱怨最大 - 它應該抱怨重複的主要功能。 –

+0

是的,我知道它可能無法做 –

回答

1

您可以在頭文件中聲明變量,例如讓我們說聲明全球.h -

//declareGlobal.h 
extern int max; 

然後,你應該定義在一個唯一的文件,例如,比方說,test.c.記得在變量被聲明的地方包含頭文件,例如在這種情況下,declareGlobal.c

//test.c 
#include "declareGlobal.h" 
int max = 50; 

然後,您可以使用此變量在任何文件 - 只是要記住,在那裏它被聲明(即declareGlobal.c)的頭文件,例如,如果你想用它在passed.c中,您可以執行以下操作:

//passed.c 
#include <stdio.h> 
#include "declareGlobal.h" 
#include "test.c" 
int main() 
{ 
printf("pass %d \n", max); 
return 0; 
} 
+0

'#include「declareGlobal.c」' - 只是**不。** – 2013-10-16 05:21:06

+0

@ H2CO3我的意思是'declareGlobal.h' – Subzero

+0

然後修復它可能嗎? – 2013-10-16 05:26:02

2

問題是你有兩個程序,並且不能簡單地在程序之間共享數據(如變量)。

您可能想了解有關shared memory和其他inter-process communication方法。


如果你只是想有一個程序,並使用在另一個文件中定義的變量另一方面,你還是做錯了。在一個程序中只能有一個main函數,所以從其中一個源文件中刪除main函數。同樣在pass.c表達式max;什麼都不做,你不需要它。

編譯時,然後通過這兩個文件,如

$ clang -Wall -g test.c pass.c -o my_program 

上面的命令後,你會(希望)有一個名爲my_program的可執行程序。

相關問題