Disclaimer: Questa domanda è strettamente accademica. L'esempio che sto per dare è probabilmente di cattivo gusto.Dereferenziazione di un puntatore a dati statici esterni all'intervallo C
Supponiamo che in CI scrivere una subroutine di questa forma:
char *foo(int x)
{
static char bar[9];
if(x == 0)
strcpy(bar, "zero");
else
strcpy(bar, "not zero"),
return bar;
}
Poi, altrove, io uso foo
come segue:
printf("%i is %s\n", 5, foo(5));
Il mio modello mentale di puntatori e variabili statiche prevede che, in pratica, l'output di questo printf sarà
5 non è zero
... ma questo è effettivamente richiesto dallo standard C o sono nel territorio del demone nasale?
per rendere le cose ancora peggiori, che dire qualcosa di simile
strcpy(foo(5), "five");
mio modello mentale dice che questo dovrebbe "lavoro" a meno che non sia esplicitamente illegale, anche se è un po 'inutile in quanto non influenza l'uscita del foo
. Ma ancora, questo è effettivamente definito dallo standard?
Per il tuo ultimo esempio, è "legale", ma non sono sicuro che sia "morale". Potrebbe anche avere un semplice vecchio globale se tutti possono modificarlo. (E fai attenzione ai fili). – Mat