Sono nuovo nella programmazione in C, quindi sto provando molte cose diverse per provare a familiarizzare con la lingua.inizializzazione di una variabile statica nell'intestazione
ho scritto il seguente:
File q7a.h:
static int err_code = 3;
void printErrCode(void);
File q7a.c:
#include <stdio.h>
#include "q7a.h"
void printErrCode(void)
{
printf ("%d\n", err_code);
}
File q7main.c:
#include "q7a.h"
int main(void)
{
err_code = 5;
printErrCode();
return 0;
}
ho poi corse il seguente nel makefile (sto usando un sistema operativo Linux)
gcc –Wall –c q7a.c –o q7a.o
gcc –Wall –c q7main.c –o q7main.o
gcc q7main.o q7a.o –o q7
l'uscita è 3.
Perché succede questo ?
Se si inizializza una variabile statica (in pratica qualsiasi variabile) nel file di intestazione, quindi se 2 file includono lo stesso file di intestazione (in questo caso q7.c e q7main.c) il linker intende fornire un errore per aver definito il doppio var?
E perché il valore 5 non è inserito nella variabile statica (dopotutto è statico e globale)?
Grazie per l'aiuto.
Solo una nota: mai, in nessuna circostanza, TUTTAVIA, inizializzare le variabili in un file di intestazione. È una pratica assolutamente scorretta. Capisco che lo stai facendo ora come esercizio di apprendimento. –
@ user82238, a meno che non sia un const statico, allora forse. –