2012-06-16 13 views
1

K & R 제 2 판을 읽는 동안 나는 프로그램이 항상 "main() {"으로 시작되었다는 것을 알아 차렸다. 나는 항상 main()이 그 앞에 int 또는 void를 가져야한다고 생각 해왔다. 그래서 그것은 "int main()"또는 "void main()"처럼 보일 것입니다. 무엇이 "main()"이고 그 차이점은 무엇입니까?main()이 main()이 아니거나 main()이 아닌 경우에도 c가 main()을 허용하는 이유는 무엇입니까?

+0

중복 가능성 [C 함수 구문 파라미터 유형 파라미터에서 선언 된 후에 (http://stackoverflow.com/questions/1585390/c-function-syntax- 동등 매개 변수 유형 - 선언 - 후 - 매개 변수 목록) – dirkgently

+2

'void main()'단순히 잘못되었습니다. – asaelr

답변

7

main()가 지정되지 않은 경우 int가 (당신이 그것을 지정해야합니다) int에 반환 형식의 기본값으로 생략 된 기존 K & R 스타일입니다. 또한 빈 괄호는 K & R 스타일에 있는데 인자가 필요 없다는 것을 보여줍니다 .. C99에서 이것은 이제 void이어야합니다. 빈 괄호는 함수가 원하는 형식이 아닌 모든 유형의 인수를 허용한다는 것을 의미합니다. 그래서 최종 결과는 다음과 같습니다 - 0이 아닌 반환 값이 비정상 종료를 표시

int main(void) { ... } 

main()int를 반환해야합니다 .. 규칙은 끝에 return 0; 문이 프로그램이 성공적으로 실행 호출자에게 나타냅니다 도움이 될 것입니다 말했다.

질문에 대한 직접적인 대답은 잘못이 아니기 때문에 main() { ... }이 작동한다는 것입니다. 컴파일러에서는 main 함수에 대해 반환 형식이 선언되지 않았으므로 기본값은 int입니다. 빈 괄호는 main이 모든 유형의 인수를 취한다는 것을 나타내며, 이는 잘못된 것도 아닙니다. 그러나, C99 스타일/표준을 준수

int main(void) { ... } 
+1

빈 괄호는 모든 유형의 인수 *를 의미하는 반면 * 'void'는 0 인수를 의미합니다. –

+0

아, 그렇습니다. 변경됨. – adelbertc

+0

@ Cicada : 이것은 사실이 아닙니다. 빈 괄호는 단순히 함수 프로토 타이핑을 피하기 때문에 잘못된 인수를 가진 호출은 제약 조건 위반이 아닙니다. 그러나 함수 정의에서 여전히 인수가없는 함수를 정의합니다. 함수를 호출 할 때 인수를 포함하면 제약 조건 위반이되지 않지만 (범위에 프로토 타입이 없으므로) 호출이 계속 실행되는 경우에도 정의되지 않은 동작을 호출합니다 일어났다. –

-3

구문 시간의 대부분이 컴파일러에 따라 사용할 수 있습니다. 예를 들어, Visual C++를 사용할 때는 "void main"이라고 쓰지만 GCC를 사용할 때는 "int main()"이라고 쓰고 프로그램이 좋거나 나쁘면 0 또는 1을 반환해야합니다.

0

이전 버전의 c에서 지원되기 때문에.

main() 

int main() 
관련 문제