문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 C++ (문단 편집) ===== C언어와의 호환성 ===== C언어와 호환된다는 특징은 그 자체로 장점과 단점을 모두 갖게 된다. 장점은 높은 호환성과 더불어 C언어 프로젝트와 섞어서 사용하기 쉽다는 것이고 단점은 C언어에 문법을 추가하다보니 C언어의 단점을 그대로 가져오게 되며 다른 언어에 비해 비교적 깔끔하지 못하다는 것이다. C언어의 단점에 대한 대표적인 예로는 매크로가 있는데, C/C++의 매크로는 문자열을 단순 치환하기 때문에 코드 문맥이나 흐름에 따라 디버그하기도 어려운 난해한 문제를 발생시키는 경우가 많다. 초보자들에게 매크로를 함부로 쓰지 말라는 이유가 바로 이 때문이다. [[https://stackoverflow.com/questions/14041453/why-are-preprocessor-macros-evil-and-what-are-the-alternatives|#]] 다만 C언어와 호환된다고만 했지 웬만하면 둘을 섞어 쓰는 경우는 별로 없다. 오히려 두 언어가 섞이면 관리가 힘들어지고 버그나 예상하지 못한 결과가 나올 수도 있다. C와 C++는 완전히 다른 별개의 언어이며, 웬만하면 섞어 쓰지 말자. [* Jens Gustedt, ''Modern C''] ---- C언어의 {{{#include}}}문은 다른 언어의 {{{using}}}, {{{import}}}, {{{package}}}와는 결이 다르다. 지정한 파일의 내용을 가감없이 그대로 포함시키는 구문이다. 그 안에 있는 모든 게 상호작용되고 특히 단순 치환하는 매크로 때문에 코드 간 의존성이 발생하여 미리 컴파일할 수 없으며 해당하는 헤더 파일을 컴파일 할 때마다 일일이 포함해야 한다. 원치 않으면 헤더와 소스 파일을 분리해야 한다. 헤더 참조 구조가 중복정의로 복잡해지는 건 덤. 그 결과 C/C++는 컴파일이 가장 느린 언어가 되어버렸다. 이러한 문제를 해결하기 위해 C++20부터 모듈 개념이 도입되었다 [* MSVC에서는 {{{#include}}} 전처리기 구문을 사용하더라도 모듈로써 동작하도록 설정할 수 있다.]. 다른 언어의 패키지, 모듈처럼 C++20의 모듈도 외부와 단절되어 있고 오직 가져오기 구문으로만 참조할 수 있다. 그러므로 이러한 단점은 시간이 지남에 따라 어느 정도 극복될 것이다. 그런데 다른 모듈에서 정의된 매크로는 사용하지 못하기 때문에, 매크로로 떡칠된 코드는 다 뜯어 고쳐야 할 수도 있다. 그래서 수많은 기존 프로젝트는 여전히 헤더를 사용할 것으로 보이며, C와의 호환성을 위해서 헤더 참조 구조는 표준에서 없어지지 않을 것이다. 또한 모듈을 모든 C++ 컴파일러에서 지원하는게 아닐 뿐더러, 모듈을 지원하거나 사용하는 라이브러리가 아직은 전무하다. 아니면 이 상황에서 MSVC, GCC, Clang, ICC와 같은 메이저 컴파일러들은 헤더를 프리 컴파일하고 사용하는 확장 기능들을 제공하고 있으므로 이를 사용하는 것이 최선이다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기