실제 언어 표준을 인용하여 이미 주어진 답변에 추가하고 싶습니다.
'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 프로그램 시작
프로그램 시작시 호출되는 함수의 이름은 main 입니다. [...] 그것은 반환 유형이 int이고 매개 변수없이 [...] 또는 두 개의 매개 변수 [...] 또는 동등하거나 다른 구현 정의 방식으로 정의되어야합니다.
이로부터 다음이 관찰됩니다.
- C11 프로그램은 독립형 또는 호스팅 된 실행 환경을 가질 수 있으며 유효합니다.
- 독립형이라면 주된 기능이 필요하지 않습니다.
- 그렇지 않으면 반환 값이 int 유형이어야합니다 .
독립 실행 환경에서는 5.1.2에 필요한 기능이 없기 때문에 시작을 허용하지 않는 유효한 프로그램이라고 주장합니다. 호스팅 된 실행 환경에서 코드는 main 이라는 객체를 도입합니다. 하지만 반환 값을 제공 할 수 없으므로 프로그램이 그렇지 않은 경우 이전과 같이 주장 할 수도 있지만 이러한 의미에서 유효한 프로그램이 아니라고 주장합니다. (예를 들어 데이터 만 제공하고 싶을 수 있음) 실행을 의미하는 경우에는 그렇게 할 수 없습니다.
'int main;' 유효한 C ++ 프로그램?
짧은 대답 (내 의견) : 구현이 "독립 실행 환경"을 사용하는 경우에만 해당됩니다.
C ++ 14 에서 인용
3.6.1 주요 기능
프로그램은 프로그램의 지정된 시작 인 main이라는 전역 함수를 포함해야합니다. 독립 환경의 프로그램이 주 기능을 정의하는 데 필요한지 여부는 구현에 따라 정의됩니다. [...] 반환 유형은 int 유형이어야하지만 그렇지 않은 경우 유형은 구현에서 정의됩니다. [...] 이름 main은 달리 예약되어 있지 않습니다.
여기서는 C11 표준과 달리 시작 기능이 전혀 언급되지 않았기 때문에 독립 실행 환경에 적용되는 제한이 적고 호스팅 된 실행 환경의 경우 C11과 거의 동일합니다.
다시 말하지만 호스팅 케이스의 경우 코드가 유효한 C ++ 14 프로그램이 아니라고 주장하지만 독립 케이스를위한 것이라고 확신합니다.
내 대답은 실행 환경 만을 고려한 것이므로 번역 환경 에서 발생하는 이름 맹 글링이 미리 일어나기 때문에 dasblinkenlicht의 대답이 작용한다고 생각 합니다. 여기에서 위의 인용문이 그렇게 엄격하게 준수되는지 확신 할 수 없습니다.
gcc -std=c99 -pedantic ...