Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Mã nguồn hợp lệ cả C và C++ nhưng cho kết quả khác nhau


Một số chương trình cho kết quả khác nhau khi biên dịch bằng C vs C++.

  • Hằng ký tự (character literals): Trong C là int, trong C++ là char. sizeof('a') trả về 4 (C) vs 1 (C++).

Ví dụ C

#include <stdio.h>
int main() {
    printf("Ky tu: %c, kich thuoc(%d)", 'a', sizeof('a'));
}

Kết quả C

Ky tu: a, kich thuoc(4)

Ví dụ C++

#include <iostream>
int main() {
    printf("Ky tu: %c, kich thuoc(%d)", 'a', sizeof('a'));
}

Kết quả C++

Ky tu: a, kich thuoc(1)
  • Struct tag: C bắt buộc dùng struct Ten khi khai báo biến, C++ không cần.

Ví dụ C

#include <stdio.h>
struct MyStruct { int x; char y; };
int main() {
    struct MyStruct st;  // bắt buộc struct
    st.x = 10; st.y = 'd';
    printf("Struct (%d|%c)", st.x, st.y);
}

Ví dụ C++

#include <iostream>
struct MyStruct { int x; char y; };
int main() {
    MyStruct st;  // không cần struct
    st.x = 10; st.y = 'd';
    printf("Struct (%d|%c)", st.x, st.y);
}
  • Kích thước bool: C (C99) _Bool kích thước 1 byte nhưng biểu thức logic như 1==1 kiểu int (4 bytes). C++ bool kích thước 1 byte.

Ví dụ C

#include <stdio.h>
int main() { printf("Bool size: %d", sizeof(1 == 1)); }

Kết quả C

Bool size: 4

Ví dụ C++

#include <iostream>
int main() { printf("Bool size: %d", sizeof(1 == 1)); }

Kết quả C++

Bool size: 1