[C언어 기초질문] main 함수의 반환형에 의미가 있나요?

wja04003의 이미지

c언어를 독학할려고 책을 몇권 샀습니다

그런데 어떤책은 main함수의 반환형이 int인데 반해 어떤책은 void네요

둘의 차이가 있나요?

-------------------------

구글링을 해보니 c언어 표준에서 main 함수의 반환형을 int로 선언하라고 나와있다고 하네요

프로그램의 정상적인 종료시 0을 반환하고 아닐시 0이 아닌수를 반환하라고 나와있는데

그럼 반환형을 void형으로 main을 선언하면 안되는 건가요?

교제를 보니 아무문제없이 void를 반환형으로 사용하고 있고 예제도 문제없이 돌아가던데..

그리고 인터넷에 반환형을 main의 반환형을 void형으로 선언한뒤 마지막에 return;이 있는 코드도 있고 없는 코드도 있더군요

지금 main함수의 반환형때문에 매우 혼란스럽습니다

yukariko의 이미지

void는 옛날 표준에서 허용해준것이고 현재 표준은 int를 반환하는것이 맞습니다.
하지만 컴파일러에 따라 옛표준이라도 void를 허용해줄 수는 있죠.
그리고 main함수의 반환값에도 찾아보시면 의미가 있습니다.
따라서 int를 반환해주면 됩니다.

사실 void,int 둘다 쓴다고 해도 혼란스러울거까진 없는데(컴파일러에 따라 이런경우는 종종보이니까요)
너무 의식하시는것이 아닌가싶네요.

wja04003의 이미지

너무 의식했나 보군요
그래도 int로 반환해주면 된다걸 알아서 좀 마음이 편안해지네요

익명 사용자의 이미지

그 프로그램이 어떤 상태로 종료되었는지 알려주는 의미가 있습니다

foo.c의 main()이 return 10으로 종료되었다고 한다면
터미널에서 foo 실행 후에 echo $?해보면 10이 나올 것입니다

이 값은 보통 프로그램이 정상적인 종료일때는 0을 갖게 해서
쉘스크립트나 혹은 그 프로그램(foo)을 간접적으로 호출한 다른 프로그램에서
프로그램(foo)이 어떤 상태로 종료되었는지 알 수 있도록 약속(?)하고 있습니다

wja04003의 이미지

int 반환형에 그런의미가 있군요
그런식으로 사용되는지는 처음 알았네요

좋은 지식 감사합니다

익명 사용자의 이미지

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

이 두가지 형태(또는 그와 동형의 형태)가 표준이고 나머지는 구현체에서 각자 알아서 정의한 형태입니다.
따라서 위 두가지 중 하나로 쓰시면 언제 어디서든 안심입니다.

main 함수의 반환값에 대해서는 따로 정해진 바는 없는데,
대신 exit 함수의 매개변수에 대해 두 가지의 매크로가 stdlib.h에 미리 정의되어 있습니다.
EXIT_SUCCESS 또는 0
EXIT_FAILURE
그래서 main 함수의 반환값으로 이 두가지 매크로를 사용하기도 하는데,
위가 성공적으로 프로그램이 종료될때를 의미하고 아래가 실패했을 때를 의미합니다.

위의 두가지가 확실히 정해진 의미이고, 그 외의 값에 대해서는 구현체가 정하기 나름입니다.
보통 널리 쓰이는 윈도나 유닉스에서는 0을 정상 종료로 보고,
그 외에는 각자 프로그램별로 자기 자신만의 의미를 정해서
쓰기도 합니다.

ifree의 이미지

일반적으로 프로그래머는 return 0 만 지정하는 경우가 많고,
프로그램이 return 문에 도달하지 못하고, 에러로 종료되는 경우에 OS 가 exit code를 제공하게 됩니다.
이러한 코드를 보고 오류의 원인을 판단할 수 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.