표준 라이브러리의 정의는 어디에서 소스 파일을 찾을 수 있는지 누가 알 수 있습니까?
예를 들어, 에 프로토 타입 화 된 함수의 정의가 들어있는 string.c
파일은 어디에 있습니까? 그리고 무엇보다도, 그것은 존재합니까?라이브러리 정의는 어디에 있습니까?
답변
모두 컴필레이션 된 상태로, 일부는 asm으로 최적화 될 수 있습니다. 정의를 보려면 컴파일러 소스가 필요합니다.
모두 컴파일 상태가 아닙니다. 'string'을 고려하십시오. –
@ John Dibling, 동의합니다! 나는 C- 함수를 의미한다. – triclosan
오픈 소스 인 GCC의 경우 미러 사이트 here에서 libstdC++ 라이브러리의 소스를 다운로드 할 수 있습니다. 다운로드에는 std 라이브러리의 소스가 포함됩니다. 다른 벤더들은 서로 다른 구현을 할 것이기 때문에 GCC의 개발자들이 표준 라이브러리를 구현하기로 결정한 것일뿐입니다.
아마 이것을 좋아할 것입니다.
C++ 표준은 표준 라이브러리에서 실제로 구현 된 부분을 구체적으로 말하지 않습니다. . 일이 하지만 예를 들어, 표준 말한다는 이름 당신의 이름을 가져다하기 위해 #include
해야합니다 파일 (들) 정도에,를 선언하는 곳은 말한다 :
std::string
basic_string<...>
의 경우 typedef
이며 프로그램에 typedef
을 가져 오려면 #include <string>
이 필요합니다. 실제로는 basic_string
또는 string
이 <string>
에 정의되어 있으며 하드 드라이브의 어느 위치에서든 <string>
도 위치한다고 말하지는 않습니다. 사실 현실 세계에서는 종종 <string>
에 들어 있지 않습니다. 내 구현에서는, (MSVC10는) string
다른 파일, 에 정의되어, 그것은 다음과 같습니다
typedef basic_string<char, char_traits<char>, allocator<char> >
string;
유용한, 응?
또 다른 측면이 있습니다. 표준 라이브러리의 많은 내용은 string
과 같은 템플릿 항목이므로 C++에서 템플릿이 작동하는 방식 때문에 이러한 기능은 소위 "포함 라이브러리"여야합니다. 그러나 표준 라이브러리의 모든 내용이 템플릿으로 구성되어있는 것은 아닙니다.
sprintf
을 고려하십시오. 표준에 따르면이 선언은 #include <cstdio>
에 의해 제공되지만 string
과 같이 선언 된 곳이 아닙니다. 그리고 sprintf
은 템플릿 일이 아닙니다. 구현은 CRT (C Runtime Library)라고도합니다. 이것은 sprintf
과 같은 코드를 실행하기 위해 프로그램이 링크하는 DLL과 LIB (MSVC10의 어쨌든) 모음입니다.
이제 나쁜 소식은 CRT에있는 구성 요소가 일반적으로 소스 코드없이 제공된다는 것입니다. sprintf
이 구현되어 있고 소스 코드를 볼 수없는 경우 사용자는 알 수 없습니다. MicroSoft에서 일하는 것을 제외하고는 소스 코드를 살펴볼 수있는 경우가 거의 없습니다. :)
5 년 전 (또는 10 년 전에) 인터넷에 어딘가에있는 CRT (실제로는 전체 윈도우)의 소스 코드가 있었다. 하지만 나는 개인적으로 GNU, uclibc 등을 볼 것입니다. 뭔가 MS의 sprintf 구현을 보는 것이 어쨌든 쓸모 없다고합니다. –
- 1. uc_mcontext 정의는 어디에 있습니까?
- 2. R.id.pager? 이 정의는 어디에 정의되어 있습니까?
- 3. BizTalk 스키마에서 Global_NS의 정의는 어디에 있습니까?
- 4. Ruby - 여기에 속성 정의는 어디에 있습니까?
- 5. `struct ap_conf_vector_t`의 정의는 어디에 있습니까?
- 6. Linux에서 POSIX 함수 "stat"의 정의는 어디에 있습니까?
- 7. 그루비 규칙 : metaClass 정의는 어디에 두어야합니까?
- 8. 인터페이스에 공통된 예외 정의는 어디에 두어야합니까?
- 9. 내 default.aspx.cs의 다른 부분 클래스 정의는 어디에 있습니까?
- 10. eclipse의 프로젝트 탐색기에 대한 JTree 정의는 어디에 있습니까?
- 11. DisplayTag - 모든 라이브러리/클래스는 어디에 있습니까?
- 12. GeoTIFF-jai 라이브러리 설명서는 어디에 있습니까
- 13. solaris 7에서 런타임 라이브러리 crti.o는 어디에 있습니까?
- 14. RoR 프로젝트에서 모든 라이브러리 파일은 어디에 있습니까?
- 15. 어디에 sscanf_s가 있습니까?
- 16. Android : 라이브러리 사용권을 어디에 사용해야합니까?
- 17. ERROR_PENDING은 어디에 정의되어 있습니까?
- 18. 빌드 출력은 어디에 있습니까?
- 19. 정의는 무엇을합니까?
- 20. 여러 정의는
- 21. BasicEditField 정의는
- 22. 이중 (?) 정의는
- 23. CONST 정의는
- 24. 형식 정의는
- 25. 유형 정의는
- 26. Autoconf - config.h는 어디에 있습니까?
- 27. Cython 템플릿의 한계는 어디에 있습니까?
- 28. Time.advance는 어디에 기록되어 있습니까?
- 29. Google 캘린더 API 라이브러리 (PHP) - 설명서는 어디에 있습니까?
- 30. NuSoap 대 PHP 비누 라이브러리. getError는 어디에 있습니까?
귀하의 컴파일러에 따라 다릅니다. – Abyx
http://ftp.gnu.org/gnu/libc/ – nmichaels
glibc 소스 코드는 http://sourceware.org/git/?p=glibc.git에 있습니다. – pmg