我有多個C文件1.c 2.c和3.c及其相應的頭文件1.h 2.h 3.h.這些文件使用相同的靜態字符*變量,所以我想在一個頭文件中定義這個變量。有沒有解決方法?在頭文件中定義char
像:#定義nameVariable valueVariable
NB:
的C文件中沒有包括的其它標題(即1.C不包括2.H和3.H等)。
所有這3個文件都包含一個4.h文件。
所有這3個文件都具有相同的Makefile。
我有多個C文件1.c 2.c和3.c及其相應的頭文件1.h 2.h 3.h.這些文件使用相同的靜態字符*變量,所以我想在一個頭文件中定義這個變量。有沒有解決方法?在頭文件中定義char
像:#定義nameVariable valueVariable
NB:
的C文件中沒有包括的其它標題(即1.C不包括2.H和3.H等)。
所有這3個文件都包含一個4.h文件。
所有這3個文件都具有相同的Makefile。
如果所討論的變量是一個永遠不會改變的常量字符串,那麼您可以使用#define
這樣做。
在4.H:
#define MY_STATIC_STRING "my_string"
這將在每一個源文件的任何地方使用MY_STATIC_STRING
執行文本替換。
如果我有一個函數使用這個靜態字符串(即functionX(static char * x);)將被接受? –
是的,'#define'是一個字符串常量,所以你可以在任何需要'char *'的地方使用它。 – dbush
在4.H將這個,所有3包括:
extern char* myGlobalVar;
這將聲明變量(就像在聲明頭文件功能),因此編譯器不會抱怨時它會在其他.c文件中引用myGlobalVar
(知道它已被聲明)。 然後把這個一個(且僅1)的3個文件的(1.C 2.C或3.C):
char* myGlobalVar = "blah";
這定義的變量,它的實際值分配給它(就像在相應的.c文件中定義函數一樣)。可以有一個標識符的多個聲明(如myGlobalVar),但只有一個定義。因此,您可以在所有.h文件中編寫extern char* myGlobalVar;
,但只能在其中一個.c文件中編寫char* myGlobalVar = "blah";
。
現在,您可以在任何3 c文件中訪問myGlobalVar
,只要它們全部包含4.h.
這裏應該提到術語。這是在頭文件中「聲明」變量,並在3個.c文件之一中「定義」變量。 –
不要在標題中定義變量。總是有更好的選擇。你總是可以使用'extern'。 –
'#define'用於定義宏而不是變量。 – Barmar
我不能使用#define? –