$bash

C/C++ int main, void main

0x0300 : Study/0x0304 : Programming

보통 C에서 int main으로 선언되고 void main 같은 경우에는 잘못 된 표기라 말해주는데

이 이유가 햇갈린다... 암튼 잘못된 선언인데 그 이유를 알아보자.


1
2
3
int main(){
    return 0;
}
cs


보통의 main 선언문 이다. 마지막에 대부분 return 0; 를 선언 해주는데 이 역할은 main() 이 정상적 으로 종료 됨을 의미하는 exit(0) 를 호출한 후, 함수를 종료하게 되는 부분이다. 이는 gcc 로 컴파일 해서 gdb나 이것저것 컴파일을 해보면 볼 수 있는데. sp(stack pointer 맞나?) 에서 main 부분 마지막 줄인 ret을 하면 libc_start_main..(정확히 이름이 기억이 나진 않넹..) 으로 점프하고 exit를 호출 하게 되는것을 확인 할 수 있다.


이때 여기서 exit()의 파라미터인 status 값은 컴파일러 마다 약간 다르게 설정되 있는데 일반적으로 0면 정상종료를 의미한다. 숫자의 의미는 각각의 에러 타입을 의미한다. 


int main()으로 하지 않고 void main() 으로 한다면 컴파일러가 컴파일 에러를 발생시키지 않아도 프로세스 상에서는 종료조건을 지정해 주지 않았기 때문에 main()함수에서 올바르지 않은 종료조건을 운영체제에 리턴하고 자신을 종료할 가능성이 있게 되어 오류가 생길 수도 있게 된다.

'0x0300 : Study > 0x0304 : Programming' 카테고리의 다른 글

C/C++ calloc vs malloc+memset  (0) 2017.10.20
C/C++ 제곱근 SQRT  (0) 2017.10.19
C/C++ int main, void main  (0) 2017.10.18
C/C++ string in switch/case  (0) 2017.10.18
NASM - LD 컴파일 후 실행  (0) 2017.05.13
GDG DevFest 요약?  (0) 2016.12.20