Le mie conoscenze di base su C e il processo di compilazione sono arrugginiti ultimamente. Stavo cercando di capire la risposta alla seguente domanda, ma non sono riuscito a collegare le basi della fase di compilazione, collegamento e pre-elaborazione. Anche una rapida ricerca su Google non ha aiutato molto. Così, ho deciso di venire in ultima fonte di conoscenza :) Definizione di variabile nei file di intestazione
lo so: Le variabili non devono essere definiti nei file .h. Va bene a dichiararli lì.
Perché: Perché un file di intestazione potrebbe avere incluso da più luoghi, ridefinendo così il più di una volta variabile (linker dà l'errore).
Possibile soluzione: Utilizzare le intestazioni nei file di intestazione e definire la variabile in questo.
È davvero una soluzione: No. Perché gli header-guard sono per la fase di pre-elaborazione. Questo per dire al compilatore che questa parte è già stata inclusa e non includerla ancora una volta. Ma il nostro errore di definizione multipla arriva nella parte linker - molto dopo la compilazione.
Questa cosa mi ha confuso su come il pre-elaborazione del collegamento & funziona. Ho pensato che la pre-elaborazione non includesse semplicemente il codice, se il simbolo dell'intestazione è stato definito. In tal caso, non dovrebbe essere risolta anche la definizione multipla di un problema variabile?
Cosa succede che queste direttive di pre-elaborazione salvino il processo di compilazione dalla ridefinizione dei simboli sotto le guardie di intestazione, ma il linker ottiene ancora più definizioni del simbolo?
yikes ... quello era in realtà semplice :) – Methos