void main()의 exit code에 대해 질문 드릴것이 있습니다.
글쓴이: ktojong / 작성시간: 토, 2015/01/03 - 10:53오전
csh에서
void main()
{
printf("Hello World\n");
}
실행 이후
$? , $status를 이용하면
13이라는 코드가 뜹니다.
그런데
void main(int argc, char **argv)
{
printf("Hello World\n");
printf("%d\n",argc);
}
이후
$? , $status를 이용하면
2이라는 코드가 뜹니다.
왜 소스코드에 따라 종료코드가 다른지 이유가 궁금합니다.
감사합니다^^
Forums:
의미없습니다.
원래 main은 int 형으로 선언하고 리턴값을 반환해야 하는 것이 표준입니다.
void로 선언해도 거의 모든 경우 돌아가기는 합니다만 shell에 돌려줘야 할 리턴값을 정의하지 않았으므로 쓰레기값이 들어갑니다. x86기준으로 리턴값은 eax 레지스터에 들어가는데 그 레지스터에 특별히 값을 지정하지 않았으므로 main 함수가 종료되는 순간 eax에 들어있던 값이 리턴값으로 간주될 것입니다.
한마디로 그냥 우연입니다.
표준은 정의되어 있지 않은 값일테고, 테스트하신
표준은 정의되어 있지 않은 값일테고, 테스트하신 구현은 마지막 실행문인 printf 의 return 값이 전달되어서 나온 것 같군요. printf 는 출력된 문자의 갯수니까요.
---
http://coolengineer.com
오오 명쾌하군요
(그런 훌륭한 설명이!)
...혹시라도 나중에 이 글을 읽을 분들을 위해 노파심에 부연하자면, 이건 물론 컴파일러가 어쩌다 보니 운이 좋아(?) 일어난 일일 뿐이고, "아 그러면 main에서 마지막으로 부른 함수의 리턴값이 프로세스의 종료 코드가 되겠군!" 같은 건 물론 당연히 절대 보장이 되지 않습니다. :)
댓글 달기