C와 C++는 문법이 매우 유사해 보이지만, 두 언어 사이에는 미묘하면서도 중요한 차이점들이 존재합니다. 그래서 동일한 소스 코드라도 C 컴파일러와 C++ 컴파일러 각각으로 컴파일하고 실행하면 서로 다른 결과가 출력되는 프로그램을 만들 수 있습니다.
아래에서 대표적인 두 가지 사례를 예제 코드와 함께 살펴보겠습니다.
1. 문자 리터럴(Character Literal)의 처리 차이
C와 C++는 문자 리터럴을 서로 다르게 취급합니다. C에서는 문자 리터럴이 정수형(int) 상수로 해석되지만, C++에서는 char 타입으로 해석됩니다. 따라서 sizeof 연산자로 문자 리터럴의 크기를 확인하면 두 언어에서 다른 값이 나옵니다.
예제 코드
#include<stdio.h>
int main(){
printf("%d", sizeof('a'));
return 0;
}실행 결과
C : 4 C++: 1
C에서는 문자 'a'가 int 타입(일반적으로 4바이트)으로 처리되어 4가 출력되고, C++에서는 char 타입(1바이트)으로 처리되어 1이 출력됩니다.
2. 불리언(Boolean) 값의 크기 차이
C 표준(C99 이전)에는 기본 불리언 타입이 없기 때문에, 비교 연산의 결과는 int 타입(4바이트)으로 처리됩니다. 반면 C++에서는 비교 연산의 결과가 전용 타입인 bool(1바이트)로 처리됩니다.
예제 코드
#include<stdio.h>
int main(){
printf("%d", sizeof(1!=1));
return 0;
}실행 결과
C : 4 C++: 1
1!=1은 거짓(false)을 의미하는 비교 연산식입니다. C에서는 이 결과가 int 타입이므로 4바이트로 계산되고, C++에서는 bool 타입이므로 1바이트로 계산됩니다.
정리
이처럼 C와 C++는 겉보기에 비슷하지만, 타입 시스템과 리터럴 처리 방식에서 차이가 있기 때문에 같은 코드가 다른 결과를 만들어낼 수 있습니다. 두 언어를 함께 다루는 개발자라면 이러한 미묘한 차이를 이해하고 있으면 코드 이식성 문제를 예방하는 데 큰 도움이 됩니다.