Main function
호스트된 실행 환경에서 실행되도록 코딩된 모든 C 프로그램은 프로그램의 지정된 시작점인
main
함수의 정의(프로토타입이 아닌)를 포함합니다.
int
main
(void)
{
body
}
|
(1) | ||||||||
int
main
(
int
argc
,
char
*
argv
[
]
)
{
body
}
|
(2) | ||||||||
| /* another implementation-defined signature */ (C99 이후) | (3) | ||||||||
목차 |
매개변수
| argc | - | 프로그램이 실행되는 환경에서 프로그램에 전달된 인수의 개수를 나타내는 음수가 아닌 값. |
| argv | - | 배열의 첫 번째 요소를 가리키는 포인터로, 이 배열은 argc + 1 개의 포인터로 구성됩니다. 이 중 마지막 포인터는 null이며, 나머지 포인터(존재하는 경우)는 호스트 환경에서 프로그램에 전달된 인수를 나타내는 문자열을 가리킵니다. argv [ 0 ] 이 null 포인터가 아닌 경우(또는 동등하게 argc > 0인 경우), 이는 프로그램 이름을 나타내는 문자열을 가리키며, 호스트 환경에서 프로그램 이름을 사용할 수 없는 경우 이 문자열은 비어 있습니다. |
이름
argc
와
argv
는 "argument count"와 "argument vector"를 의미하며, 전통적으로 사용되지만 매개변수에 다른 이름을 선택할 수도 있으며, 그들의 타입에 대해 다르지만 동등한 선언도 가능합니다:
int
main
(
int
ac,
char
**
av
)
도 동등하게 유효합니다.
main 함수의 일반적인 구현 정의 형태는 int main ( int argc, char * argv [ ] , char * envp [ ] ) 입니다. 여기서는 char ** 타입의 세 번째 인자가 추가되어, 실행 환경 변수 를 가리키는 포인터 배열 을 가리킵니다.
반환값
return 문이 사용되면, 반환 값은 암시적으로 호출되는 exit() 함수의 인자로 사용됩니다(자세한 내용은 아래 참조). 값 0과 EXIT_SUCCESS 는 성공적인 종료를 나타내며, 값 EXIT_FAILURE 는 비성공적인 종료를 나타냅니다.
설명
main
함수는 정적 저장 기간을 가진 모든 객체들이 초기화된 후 프로그램 시작 시 호출됩니다. 이는
호스팅된
환경(즉, 운영 체제가 있는 환경)에서 실행되는 프로그램의 지정된 진입점입니다. 모든
독립 실행형
프로그램(부트 로더, OS 커널 등)의 진입점 이름과 타입은 구현체에서 정의됩니다.
main 함수의 두 매개변수 형태의 파라미터들은 실행 환경에서 임의의 멀티바이트 문자열들이 전달될 수 있도록 합니다 (이것들은 일반적으로 명령줄 인수 로 알려져 있습니다). 포인터들 argv [ 1 ] .. argv [ argc - 1 ] 는 각각의 이러한 문자열들의 첫 번째 문자들을 가리킵니다. argv [ 0 ] (null이 아닌 경우)는 프로그램 자체를 호출하는 데 사용된 이름을 나타내는 null로 종료되는 멀티바이트 문자열의 초기 문자를 가리키는 포인터입니다 (또는 호스트 환경에서 이를 지원하지 않는 경우, argv [ 0 ] [ 0 ] 가 0임이 보장됩니다).
호스트 환경이 소문자와 대문자를 모두 제공할 수 없는 경우, 명령줄 인수는 소문자로 변환됩니다.
문자열은 수정 가능하며, 수정된 내용은 프로그램 종료 시까지 유지되지만, 이러한 수정 사항은 호스트 환경으로 다시 전파되지 않습니다: 예를 들어 strtok 와 함께 사용할 수 있습니다.
argv
가 가리키는 배열의 크기는 최소
argc+1
이며, 마지막 요소인
argv[argc]
는 널 포인터임이 보장됩니다.
main
함수는 다음과 같은 여러 특별한 속성을 가집니다:
|
main 함수가 값을 지정하지 않는 return 을 실행하거나, 동일하게, return 을 실행하지 않고 종료하는 } 에 도달할 경우, 호스트 환경에 반환되는 종료 상태는 정의되지 않습니다. |
(C99 이전) |
|
main 함수의 반환 타입이 호환 가능 한 int 가 아닌 경우(예: void main ( void ) ), 호스트 환경에 반환되는 값은 명시되지 않습니다. 반환 타입이 int 와 호환 가능하고 제어가 종료하는 } 에 도달할 경우, 환경에 반환되는 값은 return 0 ; 을 실행한 것과 동일합니다. |
(C99 이후) |
예제
프로그램에 입력을 어디서 찾고 결과를 어디에 쓸지 알려주는 방법을 보여줍니다. 호출 방법: ./a.out indatafile outdatafile
가능한 출력:
argc = 3 argv[0] --> ./a.out argv[1] --> indatafile argv[2] --> outdatafile argv[argc] = (nil)
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 5.1.2.2.1 프로그램 시작 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 5.1.2.2.1 프로그램 시작 (p: 10-11)
- C11 표준 (ISO/IEC 9899:2011):
-
- 5.1.2.2.1 프로그램 시작 (p: 13)
- C99 표준 (ISO/IEC 9899:1999):
-
- 5.1.2.2.1 프로그램 시작 (p: 12)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 5.1.2.2 호스트 환경
참고 항목
|
C++ 문서
for
main
함수
|