C에서 exit()

moonhyunjin의 이미지

지금까지 신경안쓰고 사용해 왔는데 갑가지 원인을 알고 싶어서 질문 드립니다.

exit()를 사용한 소스를 컴파일하면

warning: implicit declaration of function `exit'

이렇게 나옵니다만 실행은 잘되지요.

선언도 안 돼있으면서 어떻게 실행이 되는겁니까?

stoneshim의 이미지

warning은 컴파일 시에 나온겁니다.

컴파일러가 컴파일 시에 프로그램 내에 사용된 함수가 프로토타입에 맞게 사용되었는지를 검사해야 하는데 사용된 함수의 프로토타입을 찾을 수 없으므로 그런 warning을 내는겁니다.

실행이 되는것은 컴파일 후 링크될때 링커가 libc(libc.so.6 - exit() 에 대한 코딩이 여기에 있습니다)를 링크했기 때문입니다.
링크가 되었기 때문에 실행파일이 시작될때 로더가(ld-linux.so.2)가 libc 를 로드하고 실행되게 됩니다.

우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자

pynoos의 이미지

C 에서는 선언되지 않은 함수에 대한 것은 모두 int func() 로 인식합니다.
들어가는 인자의 수는 별로 중요하게 생각하지 않지요. 함수를 호출하는 녀석이 인자가 들어 있는 스택을 해제하는 환경이라면 더욱 그렇지요.

그리고, compile 할때 함수 이름에 mangling이 일어나지 않기 때문에, link 시에도 제대로 됩니다.
만일 C++이라면, 결코 가능하지 않은 시나리오입니다.

C++은 들어가는 인자에 따라 컴파일 이름이 바뀌며, link도 전혀 다른 녀석하고 되기 때문이지요. 따라서 C++은 prototype 선언이 중요하게 생각되는 것이 바로 이런 이유입니다.

cdpark의 이미지

exit() 함수가 어떻게 생겼는지 모르니까 warning이 나오죠.

man exit 라고 하면 답이 있습니다.

EXIT(3)             Linux Programmer's Manual             EXIT(3)

NAME
       exit - cause normal program termination

SYNOPSIS
       #include <stdlib.h>

       void exit(int status);

stdlib.h를 불러주면 됩니다.

mrmirang의 이미지

#include <stdlib.h>

이걸 빠뜨리신것 같은데..

설마가 사람잡을 때도 가끔씩 있죠^^;
(저같은 경우는 참 많았습니다만..)

한번 확인해보세요~~

댓글 달기

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