Наскоро започнах да осъзнавам, че използването на ключовата дума "extern" е силно насърчавано. Така започнах да се чудя дали има нещо нередно с текущия (без външен) начин, по който използвам заглавни файлове:
main.c:
#include "main.h"
#include "function.h"
int main(void){
globalvariable = 0;
testfunction();
return 0;
}
main.h:
#ifndef MAIN_H_
#define MAIN_H_
int globalvariable;
#endif /* MAIN_H_ */
функция.c:
#include "main.h"
#include "function.h"
void testfunction(){
globalvariable++;
return;
}
функция.h:
#ifndef FUNCTION_H_
#define FUNCTION_H_
void testfunction(void);
#endif /* FUNCTION_H_ */
Така всеки нов изходен файл, който се нуждае от достъп до globalvariable, просто трябва да включва main.h.
Един очевиден недостатък на този метод са масивите: не можете да използвате форматиране {element0, element1, ...}, за да присвоите стойности на масив, след като той е бил деклариран.
Между другото, когато дам на globalvariable първоначална стойност нула, дефинирам ли я в този момент? Или паметта е разпределена по-рано?
Освен това има ли официален термин за метода, който използвам?
extern
не се насърчава много; трябва да го използвате само когато е абсолютно необходимо (което се надяваме никога). - person Oliver Charlesworth   schedule 10.04.2012