[C언어 기초질문] main 함수의 반환형에 의미가 있나요?
글쓴이: wja04003 / 작성시간: 금, 2014/09/12 - 10:21오후
c언어를 독학할려고 책을 몇권 샀습니다
그런데 어떤책은 main함수의 반환형이 int인데 반해 어떤책은 void네요
둘의 차이가 있나요?
-------------------------
구글링을 해보니 c언어 표준에서 main 함수의 반환형을 int로 선언하라고 나와있다고 하네요
프로그램의 정상적인 종료시 0을 반환하고 아닐시 0이 아닌수를 반환하라고 나와있는데
그럼 반환형을 void형으로 main을 선언하면 안되는 건가요?
교제를 보니 아무문제없이 void를 반환형으로 사용하고 있고 예제도 문제없이 돌아가던데..
그리고 인터넷에 반환형을 main의 반환형을 void형으로 선언한뒤 마지막에 return;이 있는 코드도 있고 없는 코드도 있더군요
지금 main함수의 반환형때문에 매우 혼란스럽습니다
Forums:
그냥 int로 하는게 좋습니다.
void는 옛날 표준에서 허용해준것이고 현재 표준은 int를 반환하는것이 맞습니다.
하지만 컴파일러에 따라 옛표준이라도 void를 허용해줄 수는 있죠.
그리고 main함수의 반환값에도 찾아보시면 의미가 있습니다.
따라서 int를 반환해주면 됩니다.
사실 void,int 둘다 쓴다고 해도 혼란스러울거까진 없는데(컴파일러에 따라 이런경우는 종종보이니까요)
너무 의식하시는것이 아닌가싶네요.
알려주셔서 감사합니다
너무 의식했나 보군요
그래도 int로 반환해주면 된다걸 알아서 좀 마음이 편안해지네요
그 프로그램이 어떤 상태로 종료되었는지 알려주는
그 프로그램이 어떤 상태로 종료되었는지 알려주는 의미가 있습니다
foo.c의 main()이 return 10으로 종료되었다고 한다면
터미널에서 foo 실행 후에 echo $?해보면 10이 나올 것입니다
이 값은 보통 프로그램이 정상적인 종료일때는 0을 갖게 해서
쉘스크립트나 혹은 그 프로그램(foo)을 간접적으로 호출한 다른 프로그램에서
프로그램(foo)이 어떤 상태로 종료되었는지 알 수 있도록 약속(?)하고 있습니다
int 반환형에 그런의미가 있군요
int 반환형에 그런의미가 있군요
그런식으로 사용되는지는 처음 알았네요
좋은 지식 감사합니다
int main(void) int main(int
int main(void)
int main(int argc, char *argv[])
이 두가지 형태(또는 그와 동형의 형태)가 표준이고 나머지는 구현체에서 각자 알아서 정의한 형태입니다.
따라서 위 두가지 중 하나로 쓰시면 언제 어디서든 안심입니다.
main 함수의 반환값에 대해서는 따로 정해진 바는 없는데,
대신 exit 함수의 매개변수에 대해 두 가지의 매크로가 stdlib.h에 미리 정의되어 있습니다.
EXIT_SUCCESS 또는 0
EXIT_FAILURE
그래서 main 함수의 반환값으로 이 두가지 매크로를 사용하기도 하는데,
위가 성공적으로 프로그램이 종료될때를 의미하고 아래가 실패했을 때를 의미합니다.
위의 두가지가 확실히 정해진 의미이고, 그 외의 값에 대해서는 구현체가 정하기 나름입니다.
보통 널리 쓰이는 윈도나 유닉스에서는 0을 정상 종료로 보고,
그 외에는 각자 프로그램별로 자기 자신만의 의미를 정해서
쓰기도 합니다.
일반적으로 프로그래머는 return 0 만 지정하는
일반적으로 프로그래머는 return 0 만 지정하는 경우가 많고,
프로그램이 return 문에 도달하지 못하고, 에러로 종료되는 경우에 OS 가 exit code를 제공하게 됩니다.
이러한 코드를 보고 오류의 원인을 판단할 수 있습니다.
댓글 달기