W one of the answers w Tips for golfing in C, widziałem ten kod (wersja ungolfed): (? Ale kogo to obchodzi w kodzie golf)Co otrzymam, jeśli zadeklaruję tablicę bez rozmiaru w zasięgu globalnym?
s[],t;
main(c){
for(scanf("%*d "); ~(c=getchar()); s[t++]=c)
putchar(s[t]);
}
Myślę, że powyższy program, wykazuje UB. Ale rzeczą, której nie rozumiem, jest globalny zasięg w postaci s[]
. Wiem, że gdy typ zmiennej globalnej nie jest określony, domyślnie jest to int
. Stworzyłem mały program, który zaskakująco kompiluje:
#include <stdio.h>
int s[];
int main(void)
{
printf("Hello!");
}
choć emituje jedno ostrzeżenie:
prog.c:23:5: warning: array 's' assumed to have one element [enabled by default]
int s[];
^
- Co jest
s
w powyższym programie? Czy to jestint*
czy coś innego? - Czy będzie to przydatne w dowolnym miejscu?
's' jest tablicą' int' z określoną liczbą elementów w implementacji? – alk
@alk, Tak, implementacja przydziela pewien rozmiar dla 's'? –
Prawdopodobnie '0' lub' 1'? – alk