- C / C ++라는 용어 사용을 중단해야합니까?
물론. 용어를 사용하는 사람을 대신하여 C와 C ++가 무엇인지에 대한 혼란을 제외하고는이 구문이 무엇을 표현 하려는지 명확하지 않습니다.
이 혼란은 일반적인 좌절의 원천이기 때문에 많은 사람들이 그것에 대해 매우 감정적으로 변했고, 그 용어만으로도 당신의 기여에 대해 부정적이 될 수 있습니다. 이것은 어리석은 것처럼 보이지만 우리가 가진 것으로 보입니다.
“C / C ++”에 대해 말하는 대신 실제로 의미를 명확하게하는 용어를 사용하는 것이 좋습니다.
C ++에서 C ++에 해당 될 수도 있고 그렇지 않을 수도있는 것에 대해 이야기하고 있다면 간단히 C 라고 말하십시오 .
예 : C에서 함수를 어떻게 main
선언 해야 합니까?
처음에는 C ++에 대한 대답은 동일 함을 보일 수 있습니다 : int main()
나 int main(int, char**)
. 그러나 논의가 진행됨에 따라 C ++에서 함수는 전역 범위에서 선언되어야하며 C에는 의미가 없으므로 namespace
s 가 없으므로 의미가 없습니다 . 반면에 C는 main
재귀 호출을 허용 하지만 C ++에서는 재귀 호출을 허용 하지 않습니다. C ++에서는 return 0;
“내려 가면” 암시 적이 main
지만 C에서는 return
모든 경로에 명령문이 필요합니다. 목록은 계속 진행되며 토론 할 언어가 무엇인지 먼저 밝히면 토론이 훨씬 간단 해집니다.
C ++에서 C에 해당하거나 사실이 아닌 것에 대해 이야기하고 있다면 간단히 C ++ 라고 말하십시오 .
예 : s 의 malloc()
ed 배열은 int
C ++에서 처음에는 모두 0입니까?
C에 대한 짧은 대답은 동일합니다. 그러나 대답이 계속됨에 따라 C calloc
에서 C ++에서 좋은 대안이 될 std::vector<int>
수 있음을 지적하는 것이 좋습니다. 처음에는 a를 사용하는 것이 더 나은 선택이었습니다.
당신은 C와 C ++ 사이의 유사성을 지적하고 싶은 경우에, 말 ++ C와 C를 .
예 : C 및 C ++에서 sizeof
an int
은 구현이 정의되어 있으며 컴파일러와 아키텍처에 따라 다를 수 있습니다.
여기서 우리는 C와 C ++가 같은 방식으로 작동한다는 것을 지적하고 싶습니다. 우리는 두 언어 에 대해 분명히 이야기하고 있습니다.
실제로는“C”또는“C ++”뿐만 아니라 정확한 버전에 대해 더 구체적으로 이야기하는 것이 좋습니다. 두 언어 모두 진화하고 있으며
C ++는 지원 /* … */
하고 // …
주석을 제공하지만 C는 /* … */
스타일 만 지원합니다 .
옳고 그른 것도 아닙니다.
- # 1에 대한 대답이 예라면 C와 C ++를 혼합하여 사용하는 프로그램을 어떻게 호출합니까?
언어가 겹치므로 모든 C 프로그램에는 C ++처럼 보일 수 있는 부분 이 포함 되며 그 반대도 마찬가지입니다. 그럼에도 불구하고, 저자는 아마도 C 또는 C ++ 컴파일러를 사용하여 정착했을 것입니다. 따라서 C 컴파일러로 컴파일 된 경우 " 프로그램은 C 로 작성 됨"이라고 말하고 C ++ 컴파일러를 사용하는 경우에는 최신 C ++ 기능 사용을 거부하더라도 " 프로그램은 C ++ 로 작성됩니다 "라고 말하십시오. 어떤 사람들은 이러한 C ++ 코드를 C 스타일 C ++ 이라고 말합니다 . 오버로드, 예외, 다형성, 템플릿 및 I / O 스트림의 부재는 이러한 코드의 일반적인 특성입니다.
대신, 일부 파일은 C로 작성되고 컴파일 된 C 컴파일러와 일부 경우 다른 파일을 함께 링크 된 오브젝트 파일을 C ++로 작성 후, C ++ 컴파일러와 함께 컴파일, 나는 프로그램이 작성된 것입니다 "라는 말을 실제로 C와 C ++의 혼합 ”을 참조하십시오.
그러나 대신 작성자가 C 또는 C ++ 컴파일러 로 컴파일 할 수 있고 결과 프로그램이 동일한 작업을 수행 하는 방식으로 각 파일을 작성하는 데 각별한주의를 기울 였다면 다음과 같이 말할 수 있습니다. C와 C ++의 공통 부분 집합으로 작성되었습니다 .”
후자는 종종 C와 C ++ 코드간에 공유되어야하는 헤더 파일의 경우입니다. 그런데 그런 코드를 작성하는 것은 쉽지 않습니다. 당신이 더 그러한 구조는 C와 C ++에서 유효한지 사용 된 것을 강조하려는 경우 와 크게 다른 컴파일러 공급 업체 지원, 용어 휴대용 C와 C ++의 공통 부분 집합이 사용될 수있다 이것을 강조한다.
- 두 언어가 모두 "다른"언어 인 경우 C ++ 컴파일러가 C 언어로 작성된 코드 지원을 중단 할 가능성이 있습니까 (현대 C ++이 포인터, 동적 메모리 처리 등과 같은 기본 사항에 대해 C 사고 방식에서 벗어나기 때문에)?
이 질문을 이해하지 못했습니다. C와 C ++ 는 다른 언어이므로, 이들 중 하나에 대한 컴파일러가 다른 하나를 위해 작성된 프로그램을 승인 할 수는 없습니다. 그러나 컴파일러는 종종 모듈 방식으로 설계되며 컴파일러에 C ++ front-end 가 있으면 C 프런트 엔드도있을 가능성이 높습니다. 그런 다음 명령 행 스위치 또는 유사한 수단을 통해 원하는 언어를 선택할 수 있습니다. 두 언어가 널리 사용되는 한, 이것이 변경 될 가능성은 거의 없습니다. “현대 C ++”에 대한 당신의 요점은 기본적으로 좋은 코딩 표준과 표준 라이브러리의 문제라고 생각합니다. 로부터 컴파일러의 관점, 두 언어의 진화는 오히려 분기보다 수렴된다.
- 호환성을 유지하기 위해 C / C ++ 표준을 만드는 사람들 사이에 현재 협력 관계가 있습니까?
예. C ++ 11 및 C11에 도입 된 메모리 모델과 원자 연산 라이브러리가 좋은 예입니다. 두 언어의 디자이너는 호환성이 중요하다는 것을 인식하고이를 개선하기 위해 노력하고 있습니다. 개인적으로, 나는 협력이 더욱 강해졌고 두 ISO 실무 그룹이 합류하기를 원했지만 내 소원은 중요하지 않습니다.
Bjarne Stroustrup 은 아이러니하게도“C / C ++ 호환성”이라는 제목 의 C ++ 프로그래밍 언어 4 판 44.3의 44.3 버전에서 다양한 C 및 C ++ 버전의 차이점과 공통점에 대해 설명합니다 . 이 경우 용어의 의미가 분명하기 때문에이 용어를 사용하는 것이 적절할 수 있습니다.
- # 4가 맞다면, 그러한 협업은 현대 C ++ (11/14/17)의 등장으로 가까운 장래에 끝날 수 있습니다.
위에서 논의한 바와 같이, 그것은 C ++ 11에서 발생했으며 다시 일어날 것으로 기대 / 요망 / 필요합니다.