Chciałbym uzupełnić odpowiedzi już udzielone, przytaczając aktualne standardy językowe.
Czy „int main”; ważny program w C?
Krótka odpowiedź (moja opinia): tylko jeśli Twoja implementacja korzysta z „wolnostojącego środowiska wykonawczego”.
Wszystkie poniższe cytaty z C11
5. Środowisko
Implementacja tłumaczy pliki źródłowe w języku C i wykonuje programy w języku C w dwóch środowiskach przetwarzania danych, które będą nazywane środowiskiem tłumaczenia i środowiskiem wykonawczym [...]
5.1.2 Środowiska wykonawcze
Zdefiniowano dwa środowiska wykonawcze: wolnostojące i hostowane. W obu przypadkach uruchomienie programu następuje, gdy wyznaczona funkcja C jest wywoływana przez środowisko wykonawcze.
5.1.2.1 Środowisko wolnostojące
W środowisku wolnostojącym (w którym wykonywanie programu w C może odbywać się bez żadnej korzyści ze strony systemu operacyjnego), nazwa i typ funkcji wywoływanej podczas uruchamiania programu są definiowane przez implementację.
5.1.2.2 Środowisko hostowane
Nie trzeba zapewniać hostowanego środowiska, ale musi ono być zgodne z następującymi specyfikacjami, jeśli istnieją.
5.1.2.2.1 Uruchomienie programu
Funkcja wywoływana podczas uruchamiania programu nosi nazwę main . [...] Powinien być określony za pomocą zwracanego typu int i bez parametrów [...] lub z dwoma parametrami [...] lub równoważnymi lub w inny sposób określony w implementacji.
Z nich obserwuje się, co następuje:
- Program C11 może mieć niezależne lub hostowane środowisko wykonawcze i być poprawny.
- Jeśli ma wolnostojącą, nie musi istnieć główna funkcja.
- W przeciwnym razie musi istnieć jeden z wartością zwrotu typu int .
W wolnostojącym środowisku wykonawczym argumentowałbym, że jest to prawidłowy program, który nie pozwala na uruchomienie, ponieważ nie ma do tego żadnej funkcji, jak jest to wymagane w 5.1.2. W hostowanym środowisku wykonawczym, podczas gdy twój kod wprowadza obiekt o nazwie main , nie może dostarczyć wartości zwracanej, więc argumentowałbym, że nie jest to poprawny program w tym sensie, chociaż można również argumentować tak jak wcześniej, jeśli program nie jest przeznaczone do wykonania (np. on może chcieć podać dane tylko), to po prostu na to nie pozwala.
Czy „int main”; prawidłowy program w C ++?
Krótka odpowiedź (moja opinia): tylko jeśli Twoja implementacja korzysta z „wolnostojącego środowiska wykonawczego”.
Cytat z C ++ 14
3.6.1 Główna funkcja
Program powinien zawierać globalną funkcję zwaną main, która jest wyznaczonym początkiem programu. Jest zdefiniowane w implementacji, czy program w środowisku wolnostojącym jest wymagany do zdefiniowania funkcji głównej. […] Powinien mieć typ zwracany typu int, ale poza tym jego typ jest zdefiniowany w implementacji. […] Nazwa main nie jest inaczej zastrzeżona.
Tutaj, w przeciwieństwie do standardu C11, mniej ograniczeń dotyczy niezależnego środowiska wykonawczego, ponieważ w ogóle nie wspomniano o funkcji startowej, podczas gdy w przypadku hostowanego środowiska wykonawczego sprawa jest prawie taka sama jak w przypadku C11.
Ponownie argumentowałbym, że dla przypadku hostowanego Twój kod nie jest prawidłowym programem w C ++ 14, ale jestem pewien, że jest to przypadek wolnostojący.
Ponieważ moja odpowiedź dotyczy tylko środowiska wykonawczego , myślę, że w grę wchodzi odpowiedź dasblinkenlicht, ponieważ zmiana nazwy występująca w środowisku tłumaczenia ma miejsce wcześniej. Tutaj nie jestem pewien, czy powyższe cytaty są tak ściśle przestrzegane.
gcc -std=c99 -pedantic ...