Różnica między int main() i int main(void)
Obie funkcje int main() i int main(void) mogą wyglądać tak samo na pierwszy rzut oka, ale istnieje znacząca różnica między nimi w C, ale obie są takie same w C++.
W C, funkcja bez żadnego parametru może przyjąć dowolną liczbę argumentów. Na przykład, funkcja zadeklarowana jako 'foo()’ może przyjąć dowolną liczbę argumentów w C (wywołanie foo(), foo(1), foo(’A’,1) nie spowoduje żadnego błędu).
#include <stdio.h>void foo(){}int main(){ foo(); foo(1); foo(1,'A'); foo(1,'A',"ABC"); printf("ABC\n"); return 0;}
Powyższy kod działa dobrze nie dając żadnego błędu, ponieważ funkcja bez parametru może przyjąć dowolną liczbę argumentów, ale nie jest tak w przypadku C++. W C++ otrzymamy błąd. Zobaczmy.
#include <iostream>using namespace std;void foo(){}int main(){ foo(1); cout << "ABC" << endl; return 0;}
Wykonanie powyższego kodu da nam błąd, ponieważ nie możemy przekazać żadnego argumentu do funkcji 'foo’.
Jednakże użycie foo(void) ogranicza funkcję do przyjęcia dowolnego argumentu i wyrzuci błąd. Zobaczmy.
#include <stdio.h>void foo(void){}int main(){ foo(1); printf("ABC\n"); return 0;}
Powyższy kod da nam błąd, ponieważ użyliśmy 'foo(void)’, a to oznacza, że nie możemy przekazać żadnego argumentu do funkcji 'foo’, tak jak robiliśmy to w przypadku 'foo()’.
Więc, zarówno foo(void) jak i foo() są takie same w C++, ale nie w C. Tak samo jest w przypadku funkcji 'main’. Tak więc, preferowaną formą jest int main(void) jeśli main nie przyjmuje żadnego argumentu.
Różnica między int main() i void main() a main()
Jak każda inna funkcja, main jest również funkcją, ale ze specjalną cechą, że wykonanie programu zawsze zaczyna się od 'main’. Typami zwracanymi przez funkcję są 'int’ i 'void’. Tak więc, omówmy wszystkie trzy jeden po drugim.
- void main – Standard ANSI mówi „nie” dla 'void main’ i dlatego używanie go może być uważane za złe. Należy zaprzestać używania 'void main’, jeśli tak się dzieje.
- int main – 'int main’ oznacza, że nasza funkcja musi zwrócić jakąś liczbę całkowitą na końcu wykonania i robimy to zwracając 0 na końcu programu. 0 jest standardem dla „pomyślnego wykonania programu”.
- main – W C89 nieokreślony typ zwrotu domyślnie przyjmuje wartość int. Tak więc, main jest równoważne int main w C89. Ale w C99 nie jest to dozwolone, a zatem trzeba użyć int main.
Więc preferowanym sposobem jest int main.