Я хотів би додати відповіді, вже дані, цитуючи фактичні мовні стандарти.
Є 'int main;' дійсна програма C?
Коротка відповідь (на мою думку): лише якщо ваша реалізація використовує "незалежне середовище виконання".
Усі наступні цитати C11
5. Навколишнє середовище
Реалізація перекладає вихідні файли C та виконує програми C у двох середовищах обробки даних, які будуть називатися середовищем перекладу та середовищем виконання [...]
5.1.2 Середовища виконання
Визначено два середовища виконання: автономне та розміщене. В обох випадках запуск програми відбувається, коли середовищем виконання викликається призначена функція C.
5.1.2.1 Вільне середовище
У незалежному середовищі (в якому виконання програми C може відбуватися без будь-якої переваги операційної системи) ім'я та тип функції, викликаної при запуску програми, визначаються реалізацією.
5.1.2.2 Розташоване середовище
Розташоване середовище не повинно надаватися, але воно повинно відповідати наступним специфікаціям, якщо вони є.
5.1.2.2.1 Запуск програми
Функція, що викликається при запуску програми, називається основною . [...] Він повинен визначатися з типом повернення int і без параметрів [...], або з двома параметрами [...] або еквівалентом, або яким-небудь іншим способом, визначеним реалізацією.
З цього випливає наступне:
- Програма C11 може мати вільно розташоване або розміщене середовище виконання та бути дійсною.
- Якщо він має автономний, не повинно існувати основної функції.
- В іншому випадку має бути одна зі зворотною долею типу int .
У незалежному середовищі виконання я стверджую, що це дійсна програма, яка не дозволяє запускатись, оскільки немає для цього функції, як вимагається в 5.1.2. У розміщеному середовищі виконання, тоді як ваш код вводить об'єкт, названий головним , він не може забезпечити повернене значення, тому я можу стверджувати, що це не є дійсною програмою в цьому сенсі, хоча можна також сперечатися як раніше, якщо програма не є призначені для виконання (на, можливо, захочеться надати дані лише наприклад), тоді це просто не дозволяє робити саме це.
Є 'int main;' дійсна програма C ++?
Коротка відповідь (на мою думку): лише якщо ваша реалізація використовує "незалежне середовище виконання".
Цитата від C ++ 14
3.6.1 Основна функція
Програма повинна містити глобальну функцію, яку називають основною, яка позначається початком програми. Це визначається реалізацією, чи потрібна програма у вільно розташованому середовищі для визначення основної функції. [...] Він повинен мати тип повернення типу int, але в іншому випадку його тип визначається реалізацією. [...] Назва головного не інакше зарезервована.
Тут, на відміну від стандарту C11, менші обмеження застосовуються до окремо розташованого середовища виконання, оскільки жодна функція запуску не згадується взагалі, тоді як для розміщеного середовища виконання випадок майже такий же, як і для C11.
Знову я б заперечував, що для розміщеного випадку ваш код не є дійсною програмою C ++ 14, але я впевнений, що це стосується вільної справи.
Оскільки моя відповідь враховує лише середовище виконання , я думаю, що відповідь dasblinkenlicht вступає в гру, оскільки заздалегідь трапляється ім'я, що виникає в середовищі перекладу . Тут я не такий впевнений, що цитати вище дотримуються настільки суворо.
gcc -std=c99 -pedantic ...