Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C++0x는 C와 완벽하게 호환될까? C++와 C의 호환성 문제 총정리

C++0x는 C와 호환됩니까?

결론부터 말하면, C++98이든 새로운 표준인 C++0x(이후 C++11로 확정)든 어느 쪽도 C와 완전히 호환되지 않습니다. 사실 C++은 탄생한 이래 한 번도 C와 100% 호환된 적이 없습니다.

C++는 C를 기반으로 만들어졌기 때문에 상당 부분의 C 코드가 C++에서도 컴파일되지만, 두 언어는 서로 다른 언어이며 문법과 의미 체계에서 중요한 차이점들을 가지고 있습니다. 따라서 '대부분 호환'일 뿐, '완전 호환'은 아닙니다.

C와 C++의 대표적인 비호환 사례

1. void* 포인터의 암시적 변환

C에서는 void*가 어떤 포인터 타입으로든 암시적으로 변환되지만, C++에서는 명시적 캐스트가 필요합니다. 예를 들어 int* p = malloc(sizeof(int));는 C에서는 가능하지만 C++에서는 컴파일 오류입니다.

2. C99 이후의 기능 미지원

C99에서 도입된 지정 초기화자(designated initializer), 복합 리터럴(compound literal), 가변 길이 배열(VLA), restrict 키워드 등은 당시의 C++ 표준에는 포함되지 않았습니다. 일부 기능은 그 후의 표준에서 부분적으로 수용되었지만, 시점과 범위가 다릅니다.

3. const의 연결(linkage) 차이

파일 스코프에서 선언된 const 변수는 C에서 외부 연결을 갖지만, C++에서는 내부 연결을 갖습니다. 같은 코드라도 두 언어에서 동작 방식이 달라질 수 있습니다.

4. C++ 전용 예약 키워드

new, class, template, this 같은 식별자는 C++에서는 키워드로 예약되어 있으므로, 이를 변수명으로 사용하는 C 코드는 C++에서 컴파일되지 않습니다.

정리

C++0x(C++11) 역시 C++98과 마찬가지로 C와의 완전한 호환성을 목표로 하지 않았습니다. C++는 C의 상위 집합(superset)이 아니며, 공통 하위 집합 위에서 두 언어가 발전해 왔다고 이해하는 것이 정확합니다. 따라서 기존 C 코드를 C++ 프로젝트에 통합할 때는 위와 같은 차이점을 반드시 확인하고 필요에 맞게 코드를 수정해야 합니다.