C와 C++는 문법이 매우 비슷해 보이지만, 실제로는 미묘한 차이가 여러 곳에 존재합니다. 같은 소스 코드라도 C 컴파일러로 빌드했을 때와 C++ 컴파일러로 빌드했을 때 서로 다른 결과가 나오는 경우가 있습니다. 이번 글에서는 그런 대표적인 예시 몇 가지를 살펴보겠습니다.
1. 문자 리터럴의 크기 차이
C와 C++에서 문자 리터럴은 서로 다른 방식으로 처리됩니다. C에서는 문자 리터럴이 int 타입으로 취급되지만, C++에서는 char 타입으로 취급됩니다. 따라서 sizeof() 연산자로 크기를 확인하면 C에서는 4, C++에서는 1이 출력됩니다.
C 코드 예제
#include<stdio.h>
int main() {
printf("The character: %c, size(%d)", 'a', sizeof('a'));
}
출력 결과(C)
The character: a, size(4)
C++ 코드 예제
#include<stdio.h>
int main() {
printf("The character: %c, size(%d)", 'a', sizeof('a'));
}
출력 결과(C++)
The character: a, size(1)
2. 구조체 사용 시 struct 키워드 차이
C에서 구조체 변수를 선언할 때는 typedef로 별칭을 정의하지 않는 한 반드시 struct 태그를 함께 사용해야 합니다. 반면 C++에서는 구조체를 사용할 때 struct 키워드를 붙이지 않아도 됩니다.
C 코드 예제
#include<stdio.h>
struct MyStruct {
int x;
char y;
};
int main() {
struct MyStruct st; //struct 태그 필요
st.x = 10;
st.y = 'd';
printf("Struct (%d|%c)", st.x, st.y);
}
출력 결과(C)
Struct (10|d)
C++ 코드 예제
#include<stdio.h>
struct MyStruct{
int x;
char y;
};
int main() {
MyStruct st; //struct 태그 불필요
st.x = 10;
st.y = 'd';
printf("Struct (%d|%c)", st.x, st.y);
}
출력 결과(C++)
Struct (10|d)
3. 불리언(Boolean) 타입의 크기 차이
불리언 타입 데이터의 크기도 C와 C++에서 서로 다릅니다. C에서 참/거짓을 나타내는 값은 int 기반으로 처리되어 4바이트이지만, C++에서는 전용 bool 타입이 존재하여 1바이트입니다.
C 코드 예제
#include<stdio.h>
int main() {
printf("Bool size: %d", sizeof(1 == 1));
}
출력 결과(C)
Bool size: 4
C++ 코드 예제
#include<stdio.h>
int main() {
printf("Bool size: %d", sizeof(1 == 1));
}
출력 결과(C++)
Bool size: 1
마무리
이처럼 동일한 코드라도 C와 C++ 중 어떤 언어로 컴파일하느냐에 따라 결과가 달라질 수 있습니다. 문자 리터럴 처리 방식, struct 키워드 요구 여부, 불리언 타입의 크기 등은 두 언어의 대표적인 차이점이므로, 두 언어를 함께 다루는 개발자라면 반드시 기억해 두는 것이 좋습니다.