int main, void main

kikiki0611의 이미지

안녕하세요 컴퓨터공학전공 학생입니다.

다름이 아니라 오늘 알고리즘 수업시간에,
교수님께서 제가 짠 코드를 보시더니
int main ( void )
~
return 0;
을 왜 이렇게 하냐고 물으시면서, void main()으로 사용하라 라고 하시더라구요.
저는 int main이 표준으로 알고 있어 그렇게 사용했고, 그게 습관화가 됐다라고 말씀을 드렸죠.

잘못된 습관이라며 습관을 고치라고 하셨는데

정말 잘못된 습관인지, 실무에서는 어떻게 사용을 하시는지 생각이 들어
여러분께 말씀을 여쭙고자 글을 남겼습니다.

qiiiiiiiip의 이미지

당연히 int main 이 맞습니다.

http://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c

굳이 reference를 찾지 않더라도 쉽게 확인할 수 있습니다.

$ cat a.c
void main() { return; }
$ gcc -Wall a.c
a.c:1:6: warning: return type of 'main' is not 'int' [-Wmain]
 void main() { return; }
qiiiiiiiip의 이미지

void main() 의 유래를 좀 찾아보려했는데 아래 재밌는 말이 있네요..
http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?id=1043284376&answer=1044841143

Responding with "my teacher said it's OK" is no defence; teachers have a bad habit of being wrong. 

그렇게 잘못 가르치는 선생님들이 전세계적으로 많은 듯..
jick의 이미지

익명 사용자의 이미지

아, 이 외에도 여러 가지가 있습니다.

int main(int argc, char **argv);
 
int main(int argc, char **argv, char **envp);

인자 순서만 맞으면 이름은 상관 없습니다.

ymir의 이미지

void main 에 대해 재밌는 이야기들이 많네요.

pre-standard 시절 아무런 type 을 지정하지 않으면 암시적으로 int 를 리턴했었는데..
그러다가 void 가 도입되면서 아무런 type 을 지정하지 않던 습관이 void 로 대체되었고..
그 바람에 main() -> void main() 으로 쓰는 사람이 생겼다는 이야기도 있고..

MS 의 Visual C++ 같은 컴파일러가, 자체적으로(-.-) void main 도 지원하는 바람에..
습관이 잘못 든 사람들이 생겨났다는 이야기도 있네요.

Turbo C 세대라면, 어쩌면 void main 이 더 손에 익을지도.. ㅎ~

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

LIM Daeho의 이미지

해당 프로그램 실행 결과를 운영체제에 반환하려면 int main()이 적합하죠.
해당 프로그램의 실행 결과를 받아 후속 처리가 예정되어 있다면 void main()은 더욱 적합하지 않겠고요.

int main()과 void main()이 동일하게 return 0;을 해도 void main()은 0이 오지 않을 수 있습니다.

아래는 int main()이고,

$ cat test.c
int main () { return 0; }
$ ./a.out
$ echo $?
0
$ ./a.out && ls
test.c a.out
$

아래는 void main()입니다.

$ cat test.c
void main () { return 0; }
$ ./a.out
$ echo $?
237
$ ./a.out && ls
$

즉, int main() 이 좋은 습관입니다.

라스코니의 이미지

int main() 또는 int main (int argc, char **argv) 가 맞죠.
그렇지만 교수님이 void main()이 맞다고 하면 그 수업에는 그렇게 해주시면 됩니다. 학점은 소중하니까요.
그런게 바로 SOFT ware 를 하는 것이죠 ~~

익명 사용자의 이미지

컴퓨터 입문을 일본 야겜으로 시작한지라.. ㅇㅅㅇ);;
교양으로 일본어 수업을 신청했는데요. 신문 사설을 해석하는게 주된 수업내용이었습니다.

그간 갈고닦은 야겜력을 바탕으로 수업할 사설 내용을 미리 해석해 갔는데요.
내용이 노숙자(ホームレス:홈리스)로 인한 사회 문제였습니다.

수업을 시작했는데, 글쎄 교수님이 홈리스 = 집에서 발생하는 먼지 라고 하는게 아닙니까.. ㅡ0ㅡ)!!!!

저를 포함해 덕력 충만한 친구 몇몇이 홈리스는 노숙자에요~ 하니까. 교수님이 버럭!!을 시전..
전공도 아닌 니들이 감히 토를 달아!!!로 끝났습니다.

농담으로 "야.. 이거 시험에 나오면 어쩌지?"라고 애들이랑 웅성웅성 했는데..;;
이게 현실로 이루어지고 말았고.. ㅡ_ㅡ);;;

참.. 몇분을 고심하다가 양심을 버리고, 소중한 학점을 지켰습니다~ ㅋㅋ

jeff_an의 이미지

그럴땐 융통성 있게 하셔야 합니다 ㅎㅎ
학교에서 배운 내용이 100% 정확한게 아닌 것을 배우면(?) 됩니다 ㅋ

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.