[완료] c에서 함수 이름 충돌 질문입니다
글쓴이: hwanikani / 작성시간: 월, 2011/07/25 - 2:06오후
external scope를 가진 변수나 함수는 definition이 한개만 존재할수 있다고 배웠습니다.
그런데 pow같은 함수는 이미 라이브러리로 제공되는거잖아요? (math.h)
그래서 한번 pow랑 같은 이름으로 함수를 만들면 이름이 충돌이 일어 날것으로 예상하고 한번 실험해봤는데 충돌이 안일어 나더라구요 - _-;;
function signature도 정확히 같이해서 만들어 봤는데 (double __cdecl pow(_In_ double _X, _In_ double _Y) 왜 충돌이 안일어나는건가요?
Forums:
라이브러리라서요... 다음과 같이
라이브러리라서요...
다음과 같이 테스트해보세요.
같은 이름의 함수를 오브젝트로 링크할 때와 라이브러리로 링크할 때.
라이브러리일때는 에러가 나지 않습니다.
빠른 답변 감사드립니다. 사실 대충 라이브러리라서
빠른 답변 감사드립니다.
사실 대충 라이브러리라서 라는건 예상하고 있었는데
혹시 정확히 "왜" 라이브러리로 링크할때는 에러가 나지 않는지 알수 있을까요?
왜냐고 물어보시면 저는 특별히 답변을 해 드릴게
왜냐고 물어보시면 저는 특별히 답변을 해 드릴게 없네요. ^^;
혹시 아시는 분이 계시면 저도 답변 부탁드리겟습니다.~~
대부분 라이브러리의 함수 이름은 weak 심볼로
대부분 라이브러리의 함수 이름은 weak 심볼로 정의되어 있습니다. glibc 소스를 보시면 weak_alias (__pow, pow)... 로 선언된 부분을 찾으실 수 있고, libc-*.so 내용을 보시면 다음과 같은 부분을 확인하실 수 있습니다.
00d86c80 w DF .text 000001e4 GLIBC_2.0 pow
답변 감사드립니다!
답변 감사드립니다!
댓글 달기