2017-06-30 3 views
3

Ich habe mehrere C-Dateien 1.c 2.c und 3.c und ihre entsprechenden Header 1.h 2.h. 3.h. Diese Dateien verwenden die gleiche statische char * Variable, also möchte ich diese Variable in einer Header-Datei definieren. Gibt es eine Lösung?Definieren Char in Header

wie: #define nameVariable valueVariable

NB:

  • Keine der c-Dateien enthalten einen anderen Header (das heißt 1.c sind nicht 2.h und 3.h etc ..).

  • Alle 3 Dateien enthalten eine 4.h-Datei.

  • Alle 3 Dateien haben das gleiche Makefile.

+3

Variablen nicht in Headern definieren. Es gibt immer bessere Alternativen. Sie können immer 'extern' verwenden. –

+0

'# define' dient zum Definieren von Makros, nicht Variablen. – Barmar

+0

Ich kann #define nicht verwenden? –

Antwort

1

Wenn die fragliche Variable eine konstante Zeichenfolge ist, die sich niemals ändert, können Sie dafür #define verwenden.

In 4.h:

#define MY_STATIC_STRING "my_string" 

Dies wird eine Textersetzung in jeder Quelldatei ausführen überall Sie MY_STATIC_STRING verwenden.

+0

Was passiert, wenn ich eine Funktion habe, die diese statische Zeichenfolge verwendet (d. H. FunctionX (static char * x);), die akzeptiert wird? –

+0

Ja, das '# define' ist für eine String-Konstante, also benutzt man es überall wo' char * 'erwartet wird. – dbush

3

Setzen Sie dieses in 4.h, dass alle 3 sind:

extern char* myGlobalVar; 

Dies wird die Variable deklarieren (wie Funktionen in Header-Dateien deklarieren), so dass der Compiler beschwert sich nicht, wenn Er sieht myGlobalVar in den anderen .c-Dateien (in dem Wissen, dass es deklariert wurde). setzen diese dann in einem (und nur 1) der 3-Dateien (1.c 2.c oder 3.c):

char* myGlobalVar = "blah"; 

Diese definiert die Variable, die auf einen tatsächlichen Wert zuweist es (genau wie wenn Sie eine Funktion in der entsprechenden .c-Datei definieren). Es kann mehrere Deklarationen eines Bezeichners (wie myGlobalVar) geben, aber nur eine Definition. Sie könnten also extern char* myGlobalVar; in alle .h-Dateien schreiben, aber Sie können nur in eine der .c-Dateien schreiben.

Jetzt können Sie auf myGlobalVar in einer der 3 c-Dateien zugreifen, solange sie alle 4.h.

+1

Sollte die Terminologie hier erwähnen. Dies deklariert die Variable in den Header-Dateien und definiert die Variable in einer der 3 .c-Dateien. –