그래, 제목에 질문. 그러나 왜 물어 보는 이유는 The New Boston에서 비디오 튜토리얼을 가져 가고 있기 때문입니다. 왜 우리는 도서관을 직접 가져와야합니까? 그리고 모든 프로그래머가 만든 C++의 모든 lib를 의미하는 것은 아니지만 cstdlib 또는 cmath와 같이 가장 일반적으로 사용되는 라이브러리는 무엇입니까?시작시 모든 C++ 라이브러리가 자동으로 포함되지 않는 이유는 무엇입니까?
답변
두 가지가 있습니다. 응용 프로그램을 빌드하면 빌드 시스템이 표준 라이브러리에 링크되고 링커는 해당 라이브러리에서 필요한 코드와 사용자가 지정한 다른 코드를 가져옵니다.
은 당신이 여기에 대해 얘기하는 것은 하지 라이브러리,하지만 헤더입니다. 헤더는 소스 파일의 내용을 설명하므로 소스 파일을 컴파일하고 다른 곳에서 정의 된 내용을 참조 할 수 있습니다. 예를 들어,
#include <stdio.h>
int main() {
puts("Hello, world");
return 0;
}
헤더 <stdio.h>
는 인수로 문자열 리터럴 ("Hello, world\n"
)로 호출 할 수 puts
라는 기능이 있다는 컴파일러를 알려줍니다. 이 함수는 표준 라이브러리에 정의되어 있으므로 표준 라이브러리에 연결하면이 작업을 수행하는 코드가 생성됩니다.
Java와 달리 C++ 설계자는 컴파일러가 하드 드라이브를 통과하여 코드에서 사용하려는 것을 파악하려고 시도하지 않기로 결정했습니다. 당신은 그것을 말해야하며, 헤더는 그것을하기위한 메커니즘입니다. 필요한 것보다 많은 헤더를 사용하면 필요한 것보다 더 많은 텍스트를 처리한다는 것을 의미하며, 이는 다시 컴파일 속도가 느려짐을 의미합니다.
아, 그래서 특정 libs 특정 제목이 있고 그 libs 중 하나는
당신에게 (기능)를 제공하는 헤더입니다. 그래서 컴파일러는 추측 할 수있는 카탈로그와 같습니다. 그것은헤더는 텍스트 파일입니다. 컴파일러가'#include whatever'을 보았을 때 컴파일하는 파일의 일부분 인 것처럼 그 파일에서 텍스트를 읽습니다. 아무것도 더. 이 시점에서 헤더와 라이브러리의 세부 사항을 무시하는 것이 좋습니다. 나중에 하나 이상의 소스 파일로 구성된 프로그램을 작성하기 시작할 것이고, 그렇게 할 때 헤더와 링크에 대해 모두 배우게됩니다. –
달콤한, 건배 남자, 도움을 주셔서 감사합니다. 프로그래밍을 시작하기가 어렵습니다 (알고 계시 겠지만). 자신에게 도움이 될만한 지침을 제공하는 사람들이 있습니다. –
라이브러리를 포함하면 비용이 발생합니다. 그들의 기호는 컴파일에 더 오래 걸리고 결과물을 더 크게 만듭니다. 일부 라이브러리의 이름은 다른 라이브러리의 이름과 충돌하거나 자체 코드의 이름과 충돌 할 수 있습니다. '가져 오기'가 자동으로 이루어지면 어떻게 가져올 수 있습니까? "일반적으로 사용되는"것이 무엇인지 누가 결정합니까? 나는 거의 C++ 프로젝트에서 stdlib을 사용하지 않는다. 때때로 수학을 사용하지만 자주 사용하지는 않습니다.
"패키지"가 기본적으로 가져 오는 언어는 생각할 수 없습니다. (Java, C#, Python, C/C++)
java.lang'은 자동으로 가져 왔습니까? 파이썬 2에서는'예외 '의 내용이 있지만 파이썬 3에서는 그냥 내장 된 것입니다. –
표준 C++ 라이브러리 헤더도 자동으로 포함되지 않는 이유는 컴파일 시간이 상당히 길어지기 때문입니다. 헤더 파일을 포함 시키려면 내용을 #include
문에 붙여 넣기 만하면되므로 포함 된 코드가 실제로 필요하지는 않더라도 매우 긴 번역 단위로 끝낼 수 있습니다.
문제는 모든 것을 포함하면 컴파일러가 프로젝트를 구문 분석하고 컴파일하는 데 훨씬 오래 걸리는 것입니다. stl이 주로 템플릿으로 작성되기 때문에 때로는 특히 mpl (메타 템플릿 프로그램)의 경우 엉덩이에 통증이 있습니다.
하지만 가장 일반적인 라이브러리를 고려하여 새 프로젝트를 설정할 때마다 가져올 수 있습니다.
"가져 오기"는 올바른 용어가 아닙니다. 라이브러리의 헤더 파일이없는 라이브러리는 "include"d됩니다. #include
파일은 다른 기능 및 기타 유용한 정의의 서명에 대해 컴파일러에 알립니다. Sun의 모든 것을 자동으로 포함 시키면 컴파일러의 작업이 늘어나고 컴파일 시간이 길어집니다. 또한 컴파일러가 더 많은 메모리를 필요로합니다. 추가적인 이점은 컴파일러 이 적절한 헤더가 제공 될 때 프로그래머의 의도를 알고 있다는 것입니다.
C/C++은 더 작은 코드 풋 프린트로 코드를 엄격하게 유지하려고합니다. 그들은 메모리 사용을 가능한 한 가장 효율적으로 유지하기를 원하며 그 철학은 컴파일러에도 반영됩니다.
- 1. PHP가 포함되지 않는 이유는 무엇입니까?
- 2. 부모 요소에 여백이 포함되지 않는 이유는 무엇입니까?
- 3. 이 jQuery에는 작업이 포함되지 않는 이유는 무엇입니까?
- 4. AntiForgeryToken이 기본적으로 모든 양식에 포함되지 않는 이유는 무엇입니까?
- 5. PHPMailer 클래스가 파일에 포함되지 않는 이유는 무엇입니까?
- 6. Ruby가 RHEL/CentOS에 포함되지 않는 이유는 무엇입니까?
- 7. 내 SWF가 포함되지 않는 이유는 무엇입니까?
- 8. Silverlight에서 System.Xml에 XmlDocument가 포함되지 않는 이유는 무엇입니까?
- 9. 내 기능에 업무가 포함되지 않는 이유는 무엇입니까?
- 10. JMS가 JDK에 기본적으로 포함되지 않는 이유는 무엇입니까?
- 11. MsiEnumProdcuts에 MS Office가 포함되지 않는 이유는 무엇입니까?
- 12. 첫 번째 api.add_files가 포함되지 않는 이유는 무엇입니까?
- 13. 이 작업이 포함되지 않는 이유는 무엇입니까?
- 14. 이 공유 라이브러리가 연결되지 않는 이유는 무엇입니까?
- 15. pyc 라이브러리가 pyc로 제공되지 않는 이유는 무엇입니까?
- 16. Google Closure 라이브러리가 CDN에서 호스팅되지 않는 이유는 무엇입니까?
- 17. 승화 - 빌드가 자동으로 선택되지 않는 이유는 무엇입니까?
- 18. jQuery가 모든 기능을 자동으로 "라이브"로 설정하지 않는 이유는 무엇입니까?
- 19. 포함 된 항목이 실제로 포함되지 않는 이유는 무엇입니까?
- 20. Qooxdoo contrib 라이브러리가 포함되지 않았습니다.
- 21. 시작시 자동으로 패키지 업데이트
- 22. 방법을 선택할 때 Chrome Dev Tools에 괄호가 자동으로 포함되지 않는 이유는 무엇입니까?
- 23. # <Python.h>이 # 포함되지 않는 이유는 무엇입니까?
- 24. vcomp100.dll이 설치 프로젝트에 포함되지 않는 이유는 무엇입니까?
- 25. React가 shouldComponentUpdate를 자동으로 최적화하지 않는 이유는 무엇입니까?
- 26. 부울 유형에 예/아니요가 포함되지 않는 이유는 무엇입니까?
- 27. 내 프로젝트에 벡터 또는 배열이 포함되지 않는 이유는 무엇입니까?
- 28. 실행 파일이 '추출 모두'에 포함되지 않는 이유는 무엇입니까?
- 29. Firebase 라이브러리가 iOS Swift 애플리케이션으로 가져 오지 않는 이유는 무엇입니까?
- 30. DefDlgProc에서 WM_CLOSE를 자동으로 처리하지 않는 이유는 무엇입니까?
왜 구문 분석과 컴파일러가 필요하지 않을 수도있는 컴파일 작업을 방해합니까? – jrok
"라이브러리 가져 오기"란 무엇을 의미합니까? 표준 C 및 C++ 라이브러리는 기본적으로 프로그램에 링크되어 있습니다. –
** 단순한 ** 대답은 컴파일러가 모든 표준 .h를 읽어야한다는 것입니다. –