티스토리 뷰
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안해줘도 같은 프로젝트 내의 어디에서나 쓸 수 있음)
함수 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안해줘도 같은 프로젝트 내의 어디에서나 쓸 수 있음)
'Language > C C++' 카테고리의 다른 글
WinINet을 이용한 FTP 사용 (0) | 2010.06.17 |
---|---|
c에서 파일 입출력 쉽게 하기 (0) | 2010.06.04 |
헤더에서 컴파일러 구분하기 (0) | 2010.04.27 |
함수 이름 앞에 ::가 붙는 경우 (0) | 2010.04.07 |
유니코드 프로그래밍 (0) | 2009.02.13 |
구조체 포인터에 관하여 (0) | 2008.12.09 |
미리 컴파일된 헤더 - PCH 에러 해결법 (0) | 2008.12.09 |
함수로 배열 리턴 받는 방법 (2) | 2008.12.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- gcc
- Troubleshooting
- MFC
- NDK
- algorithm
- linux
- API
- jni강좌
- driver
- AWS
- jni
- 프로그래밍
- source
- android
- kering
- Python
- 리눅스
- Visual C++
- C++
- 안드로이드
- database
- Cloud
- Quiz
- winapi
- 드라이버
- java
- it
- C
- 음악
- db
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함