Post
KO

main() 함수란?

C 언어의 시작점인 main() 함수에도 인자가 있다. 지금까지 main() 함수의 인자는 본적이 없는데 무슨 소리냐고 반문하는 사람도 있겠지만, 분명 main() 함수에도 인자가 있다.

사실 main() 함수는 원형이라는 것이 딱히 정해져 있지 않다. 그 이유는 main() 함수가 운영체제에 의해 실행되는 진입점 역할을 하므로 프로그램의 시작과 종료 시 다양한 시스템에서 운영 환경을 수용 할 수 있도록 충분히 유연해야 하기 때문이다. 따라서 C에서는 main() 함수의 원형을 특별히 정하지 않고, 컴파일러에 의해 유연하게 정의되게 한다. 거의 대부분의 컴파일러가 기본적으로 int main(void), void main(void)을 지원하고 있으며, 다음과 같은 형태의 원형도 지원한다.

int main( int argc, char *argv[]);**

위 원형은 프로그램을 실행하면서 운영체제 환경에서 C 프로그램으로 특별한 정보를 넘겨줘야 할 때 사용한다. 예를 들어, 도스의 type 명령이나 유닉스의 cat 명령의 경우 파일명을 부가적인 정보로 받아들여 파일의 내용을 콘솔에 출력해준다.

c:\myv\ type readme.txt**

유닉스라면

cat readme.txt**

여기서 type이나 cat은 C언어로 작성된 으용 프로그램이며, readme.txt는 응용프로그램에게 전달하는 정보로 사용되는 인자이다. 이와 같이 응용프로그램 이름 뒤에 기술하는 인자를 명령행 인자 (command line argument)라고 한다.

따라서 int main( int argc, char *argv[]) **로 되어 있는 프로그램을 실행시에

c:\test.exe add test.txt test2.txt test3.txt

를 실행하게 되면

argc는 test.exe 다음에 오는 인자의 갯수인 4를

argv는 배열에 [‘add’,’test.txt’,’test2.txt’,’test3.txt’] 로 담기게 된다.

그리고 메인함수의 return문은 운영체제에 어떤 값을 반환하는 것입니다.

왜 return 0; 이렇게 0 이라는 값을 반환했느냐 하면, “에러가 없이 정상적으로 프로그램이 종료되었다”는 뜻입니다.만약 main() 에서 무슨 에러가 있었다면 0이 아닌 값, 예를 들어 1이나 2 또는 -1 등을 윈도우로 반환해야 합니다.

보통 함수에서는 그 함수가 하는 일에 따라서 리턴 값이 달라지지만, main() 함수에서는 되도록 위의 규칙에 맞게 반환값을 정해야 합니다.

그렇지 않으면, 그 프로그램을 배치 파일 (BATCH; .BAT) 등에서 사용할 때 문제가 생길 수 있습니다.배치 파일 안에서는, 방금 실행한 프로그램이 성공적으로 종료되었는지 아닌지 판단하기 위해, 그 프로그램의 반환값을 사용합니다. 반환값이 0이면 그 프로그램이 성공적으로 종료되었다고 판단하고 그 다음 작업을 계속합니다. 0 이 아니면 에러가 있다는 뜻이니까, 에러에 대한 적절한 처리를 해야 합니다.

return 은 함수가 아니라, C언어의 키워드(keyword) 즉 “예약어”입니다. C언어에서는 뒤에 소괄호”()”가 없으면 함수가 아닙니다.

return 은, 현재 있는 함수에서 빠져나가며, 그 함수를 호출했던 곳으로 되돌아 가라는 뜻입니다. 되돌아 가면서 그 함수를 호출했던 곳 즉 calling routine 에 어떤 값을 반환하는 것입니다.return 0; 는 0 이라는 값을 반환하라는 의미이고return 1; 은 1 이라는 값을 반환하라는 뜻입니다.return 은 함수의 어떤 곳에서도 위치할 수 있는데, return 이 실행되는 즉시 그 함수는 무조건 실행이 종료됩니다.즉, 현재의 함수에서 빠져 나가라**는 의미입니다.

하단 참조 사이트 :  http://mwultong.blogspot.com/2006/12/c-return-0-return-1-return-1.html

This article is licensed under CC BY 4.0 by the author.