In one of the answers in Tips for golfing in C, ho visto questo codice (versione ungolfed): (? Ma che importa in campo da codice)Cosa ottengo se dichiaro un array senza una dimensione nell'ambito globale?
s[],t;
main(c){
for(scanf("%*d "); ~(c=getchar()); s[t++]=c)
putchar(s[t]);
}
Credo che il programma di cui sopra presenta UB. Ma la cosa che non capisco è lo s[]
nell'ambito globale. So che quando il tipo di una variabile globale non viene specificato, per impostazione predefinita è int
. Ho creato un piccolo programma che raccoglie sorprendentemente:
#include <stdio.h>
int s[];
int main(void)
{
printf("Hello!");
}
se emette un avvertimento:
prog.c:23:5: warning: array 's' assumed to have one element [enabled by default]
int s[];
^
- Ciò che è
s
nel programma di cui sopra? È unint*
o qualcos'altro? - Sarà utile ovunque?
's' è una matrice di' int' con un numero definito di elementi di implementazione? – alk
@alk, Quindi, un'implementazione alloca alcune dimensioni per 's'? –
Probabilmente '0' o' 1'? – alk