"int main (vooid)"? Jak to działa?
Ostatnio musiałem wpisać mały program testowy C i w trakcie tego procesu popełniłem błąd ortograficzny w głównej funkcji, przypadkowo używając vooid
zamiast void
.
A mimo to działało.
Redukując go do najmniejszej pełnej wersji, skończyło się na:
int main (vooid) {
return 42;
}
To robi rzeczywiście kompiluje (gcc -Wall -o myprog myprog.c
) i po uruchomieniu zwraca 42.
Jak dokładnie jest to poprawny kod?
Oto zapis wycięty i wklejony z mojej bash
powłoki do pokaż co robię:
pax$ cat qq.c
int main (vooid) {
return 42;
}
pax$ rm qq ; gcc -Wall -o qq qq.c ; ./qq
pax$ echo $?
42
4 answers
Po prostu używa składni deklaracji funkcji w starym stylu; domyślnie deklarujesz parametr int
o nazwie vooid
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-19 18:33:35
To poprawny kod, ponieważ myprog.c zawiera:
int main (vooid) // vooid is of type int, allowed, and an alias for argc
{
return 42; // The answer to the Ultimate Question
}
vooid
zawiera jeden plus liczbę przekazywanych argumentów (np. argc
). Więc w efekcie wszystko, co zrobiłeś, to zmienić nazwę argc
na vooid
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-04 13:21:12
W C, domyślnym typem argumentu funkcji jest int
. Więc twój program traktuje słowo vooid
jako int main(int vooid)
, które jest doskonale poprawnym kodem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-13 22:49:10
Jest tylko gcc -std=c89 -Wall -o qq qq.c
i gcc -std=gnu89 -Wall -o qq qq.c
nie emituj Ostrzeżenia. Wszystkie pozostałe standardy emitują ostrzeżenie o typie implicit int
dla vooid
.
int main(chart)
zachowuje się tak samo jak int main (vooid)
.
return vooid;
Zwraca liczbę argumentów wiersza poleceń.
Testowałem z gcc 4.4.5 na Debian testing system.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-13 22:58:35