Portál AbcLinuxu, 4. května 2025 06:07
int delka_pole;
scanf("%i", &delka_pole);
int mojepole2[delka_pole];
pomocí "gcc -ansi main.c
", tak mi to nenahlásí chybu? Až po přidání "-pedantic-errors
" se objeví... "forbids variable length array ‘mojepole2’
"
Má v současnosti C89 oproti C99 ještě někde nějaký reálný význam, když je i kompilátor s volbou ansi
takhle benevolentní?
int delka_pole;
scanf("%i", &delka_pole);
int * mojepole2;
mojepole2 = malloc(delka_pole);
if(mojepole2 == false) return -1
V dotazu se nejedná se o dynamickou alokaci, ale o pole s variabilní délkou, které umožňuje definovat standard c99, ale v c89/90 by toto nemělo být možné.
PS: K tvému příkladu: Porovnávat ukazatel vůči false
je docela zajímavé (navíc v c89 true/false není by-default).
Pokud přidáš -pedantic
už se ti vysype warning o poli s nekonstantní délkou, pokud dáš -pedantic-errors
nepřeloží se to.
V manuálu (gcc) píšou, že samo o sobě -ansi
nezabrání kompilaci non-ansi kódu.
Má odpověd zní, pokud to cheš 100-pro c89, dej -ansi -pedantic-errors
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.