티스토리 뷰

c++에서는

함수 overload기능 때문에 함수 호출 시 실제 이름으로 호출하지 않는다.


.cpp 파일에서

int sum(int a, int b){ return a+b;}
float sum(float a, float b){ return a+b;}

int main(){ sum(1,2); sum(1.0,2.0); return 0;}

하면 무사히 컴파일 되는데 함수 overload처리를 위해서 내부적(vs6.0의 어셈블리로 보면 됨)으로 코드를 관찰 할 경우 sum(..)을 호출 하는 것이 아니고 int sum(...)의 경우는 sum@HMZZZMH 이고 float는 sum@HMZZZHH 뭐 이런 식의 이름으로 바뀌어 호출하게 된다.
하지만 .c 파일의 경우 overload 함수가 없기 때문에 그냥 sum 함수를 호출 하게 된다.

cpp에서 작성하는 함수 이름 앞에 extern "C"를 붙여주면 overload 가능성을 생략하여 뒤쪽의 아리까리한 sum@HMZZZMH 같은 이상한 이름으로 되는 것이 아니고 sum 자체로 함수 이름이 지정 되어 외부(.c이건 뭐이건)에서 sum이라는 함수 명으로 사용할 수 있게 된다. 그래서 DLL을 만들 때 extern "C"를 써준다. 전역 변수 선언의 extern과는 다른 의미이다. (함수는 이미 만들어진 순간부터 전역이므로 extern안해줘도 같은 프로젝트 내의 어디에서나 쓸 수 있음)
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함