Ho il seguente codice sorgente che mi interessa.extern con definizione globale di variabile in c
#include <stdio.h>
extern int foo;
int foo = 32;
int main()
{
printf("%d", foo);
}
Questo perfettamente normale pezzo di codice, e quando compilo con
gcc -Wall -Wextra -pedantic foo.c
ottengo nessun avviso.
E sembra strano, perché una variabile è definita sia come esterna che globale nello stesso file. Sono abbastanza sicuro che è facile per il linker trovare il riferimento per la variabile esterna nello stesso file, ma non sembra un errore di codifica? E se sì, perché il compilatore non lo avverte?
prima dichiarata poi definita può essere vista anche nella definizione della funzione come: 'void function (int n; char d [n], int n);' Sono corretto **? ** –
@GrijeshChauhan corretto. Questo è il meccanismo che consente la creazione di programmi con parti compilate separatamente più piccole (file di oggetti e librerie). Codice e dati possono essere sparsi su un numero di file. –