2012-01-01 4 views
1

가능한 중복 :
What is the proper declaration of main?스타일

내 C 기술 일하고 내가 발견 한 그

INT 주 (INT의는 argc , char * argv [])

리턴 (EXIT_SUCCESS)

대신

은 INT 주() 왜이 0

입니다 반환?

+0

두 가지 질문이 있습니다. –

+0

@ChristianJonassen : 또한 FAQ 질문은'main()'에서 돌아 오는 것에 대해서도 논의합니다. –

+0

네 말이 맞아. 이 질문은 중복입니다. –

답변

9

, 그것을 사용하는 것이 합리적이고 현명한입니다 :

int main(void) { ... } 

기준이 사용뿐만 아니라 인수를 사용하여 하나의 축복.-Wstrict-prototypes으로 컴파일하고 void을 포함하지 않으면 GCC에서 경고를받습니다. 따라서 void을 작성합니다. 여기서는 C++이 다릅니다.

return EXIT_SUCCESS;의 경우 일반적으로 거의 이점이없는 것으로 보입니다. 나는 함수의 끝 부분에 return 0;을 계속 써 넣는다. C99에서는 반환을 생략 할 수 있지만 (예 : return 0;을 작성한 것처럼 동작한다.).

ISO/IEC에게 9899 : 1999

§5.1.2.2.1 프로그램 시작

¶1 프로그램을 시작할 때 호출되는 함수의 이름은 main을. 구현시이 함수에 대해 프로토 타입을 선언하지 않습니다. 그것은 int 리턴 유형없고 파라미터로 정의한다 :

int main(void) { /* ... */ } 

또는 그들이에 국부적으로 어떤 이름이 이 사용될 수 있지만, argcargv 여기 언급 개의 파라미터 (함께 그들이 선언 된 기능) :

int main(int argc, char *argv[]) { /* ... */ } 

또는 이와 동등한 것; 9) 또는 일부 다른 구현 방식으로 정의됩니다.

9) 이와 같이,이 intint 정의 타입 정의의 이름 또는 argv 유형으로 대체 될 수 등등 char ** argv로 기록 될 수있다. main 함수의 반환 형식이 int와 호환되는 유형 인 경우

§5.1.2.2.3 프로그램 종료

¶1의 main 함수에 초기 호출에서 반환은 exit를 호출하는 것과 같습니다 함수는 인수로 main 함수에 의해 반환 된 값으로; 반환 형식이 int와 호환되지 않습니다 경우 main 기능을 종료한다 }에 도달 10) 종료 상태가 지정되지 않은 호스트 환경에 반환, 0의 값을 반환합니다. §6.2.4에 따라

10)main 에 선언 자동 저장 기간이 객체의 수명은 후자에하지 않았을 경우에도, 전자의 경우에 끝난 것입니다.

§7.20.4.3 출구 기능 마지막으로

¶5는, 제어는 호스트 환경에 반환됩니다. 상태 값이 0이거나 EXIT_SUCCESS 인 경우 상태 구현 종료에 대한 구현 정의 형식은 이 반환됩니다. status의 값이 EXIT_FAILURE 인 경우 구현 실패로 인해 상태가 성공적이지 않은 양식이 반환됩니다. 그렇지 않으면 반환 된 상태는 구현 정의 된 입니다.

제외 : 명확하게 C 표준은 구현이 (int 이외의 main()에 대한 반환 형식을 허용 할 수 있음을 나타냅니다 §5.1.2.2.3합니다 명시 int 이외의 반환 유형을 금지 C++ 표준, 달리). 그러나 Jens이 올바르게 지적한대로 main에서 main의 반환 유형이 명시 적으로 허용되는 경우에만 int 반환 유형을 허용합니다. 허용되는 경우 문서에 허용되는 제한이 설정됩니다.

+0

+1하지만, 아마도'int'를 반환하지 않는'main'의 속성은 "implementation specific"이라고 덧붙여 야합니다. 즉 컴파일러 제작자가 반환 유형을 선택하는 사용자가 아니며 두 번째로 컴파일러 설명서에 명확하게 지정해야합니다. –

1

int main (int argc, char * argv [])은 명령 줄 인수를 사용하려는 경우입니다.

EXIT_SUCCESS0보다 설명이 잘되는 #define입니다.

1

int main(int argc, char *argv[])은 프로그램 실행시 사용자 입력 인수, 즉 프로그램 이름 뒤에 콘솔에 쓰는 텍스트를 허용합니다.

return (EXIT_SUCCESS)은 O. 0을 성공한 종료 값으로 기대하지는 않습니다. 다른 값이지만 대부분의 경우 EXIT_SUCCESS는 0입니다.

+0

호출 환경에 반환 된 값이 0을 성공으로 간주하지 않는 경우에도 main에서 0을 반환하거나'exit (0)'을 호출하면 성공한 종료로 해석해야합니다 (이 경우 0은 성공으로 간주 됨). 내 대답은 C99 표준의 인용문을 참조하십시오. –

1

운영 체제는 프로그램의 성공적인 작동을 나타내는 방법이 다를 수 있습니다. 매크로 EXIT_SUCCESS은 프로그램이 컴파일되는 시스템에 적합한 값으로 이상적으로 확장됩니다.

http://en.wikipedia.org/wiki/Exit_status

1

는 (이 두 가지가 서로 상관없는 부탁드립니다.)

귀하의 첫 번째 질문에 대답하기 : ) (주 INT 그냥 프로그램이 명령 행을 수락하지 않는 것을 의미합니다 갖는 인수. 두 개의 인수를 취하는 경우 argc는 인수 개수입니다 (첫 번째 인수는 프로그램 자체의 경로 또는 이름이므로 항상 1보다 크거나 같음). argv는 인수 목록입니다.

두 번째 질문에 대답하려면 EXIT_SUCCESS는 이며 보장되는은 기본 운영 체제에서 성공한 것으로 해석해야합니다. 당신이 인수 목록을 무시하려는 경우