C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[47115] Re:Re:extern func(); 형식은 언제 사용하는건지 궁금합니다.
마술감자.명국진 [magicpotato] 1151 읽음    2006-11-16 18:38
오 시원한 답변 감사감사 ^^

전재득 님이 쓰신 글 :
: 모든 컴파일러가 동일하게 작동한다고 말하긴 어렵지만...
: 일단 c/c++을 놓고 봤을때 extern "C" 를 하는것은 c++의 오버로딩이 함수 호출시
: 어려움을 가져다 줄 수 있기 때문에, c++은 컴파일러 내부적으로 오버로딩시 또는 오버로딩을
: 굳이 하지 않더라도 다른 함수명을 (직접생성?) 하여 링크를 합니다. 하지만 C의 경우에는 그 함수의
: 심볼을 그대로 사용 합니다. 따라서 C언어 함수 호출 스펙에 맞게 하기위해 extern "C"를 사용하게 됩니다.
: 컴파일러마다 조금씩 다릅니다만. 링크시 오브젝트만 등록해도 바로 호출해서 쓸수있는 경우가 있습니다.
: (GCC의 경우) extern func(); 의 경우에는 원본과 링크 이외에는 특별한 목적이나, 내용이 전혀 없습니다.
: 단지 원본과 연결만 해 줄 뿐이죠.. 한마디로 링크시 연결만 해주느 메크로에 불과 한거죠...
: 각각의 파일들을 미리 컴파일하고 마지막으로 한번에 링크 과정을 거치게 되는데, 그때 전역에 선언된 모든
: 심볼들은 일종의 심볼 테이블을 가지고 있고, 링크시 서로 연결 시켜주게 되어 있지요...
: 결론적으로 차이점을 본다면, 저는 문법상의 이해라고 봅니다. 물론 c++의 경우에는 앞서 설명했듯 링크가
: 힘들수 있기때문에 "C"스펙을 사용하게 됩니다만. 그외의 extern은 링크시 도움을 주는 역활 밖에 없습니다.
: 원본의 H파일에 선언이 되어있고 그걸 인클루드해서 쓴다면 다시 사용하는 쪽의 C파일에 굳이 extern을 할
: 필요가 없게 됩니다. conio.h 처럼 말이죠..  하지만 h파일없이 c파일만 컴파일이 되어있고 거기에 전역
: 함수가 등록 되어 있는 경우. (그냥찾기도합니다만) 문법상 이나, 없는 레퍼런스를 그냥 가져다 쓰는것도 우습기에
: extern 해서 외부에 이런게 있다고 코딩하는 사람이나 컴파일러에게 알려주게 되는거죠...
: 다시말해 extern을 넣는 경우에는 원본 h가 없는 경우 obj만 가지고 링크를 시도할때 사용하고,
: 그외의 경우에 (원본 h가 있는경우)는 그냥 인클루드해서 사용하는게 올바르다고 할 수 있겠네요...
:
:
: 허접한 답변 봐주셔서 감사합니다 ㅎㅎ
:
:
: 마술감자.명국진 님이 쓰신 글 :
: : 제가 알기로는 a.cpp같은데서 b.cpp에 바디가 있는 함수를 호출하기 위해서 사용하는것으로 알고 있고,
: : 헬프에도 그렇게 나와있는것 같습니다. (TurboC++, VC7둘다)
: :
: : 그런데 TurboC++과 VC7의 stdio.h나 conio.h같은 헤더를 뒤져보면
: : 외부로 노출하는 함수에 extern을 하나도 붙이지 않고 있네요.. (C++인 경우는 extern "C"지만 C인 경우는 안붙네요..)
: :
: : 오랫동안 extern을 당연히 붙이는것으로 알고 코딩하고 있었는데
: : 다른분의 코드를 리뷰하다가 안 붙이는걸 보고 궁금해서 찾다가 답을 못찾아서 질문 올립니다
: :
: : 함수 선언시에 extern function(); 과 function(); 의 차이점과 컴파일러/링커의 구현까지 어떻게 되는지 알고 싶습니다.

+ -

관련 글 리스트
47017 extern func(); 형식은 언제 사용하는건지 궁금합니다. 마술감자.명국진 1024 2006/11/08
47114     Re:extern func(); 형식은 언제 사용하는건지 궁금합니다. 전재득 1603 2006/11/16
47115         Re:Re:extern func(); 형식은 언제 사용하는건지 궁금합니다. 마술감자.명국진 1151 2006/11/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.