2013-10-29 19 views
18
#include<stdio.h> 
int main() 
{ 
    printf("%d", sizeof('a')); 
    return 0; 
} 

Tại sao mã trên tạo ra các kết quả khác nhau khi biên dịch trong C và C++? Trong C, nó in 4 trong khi trong C++, nó là câu trả lời chấp nhận được hơn, tức là 1.
Khi tôi thay thế 'a' bên trong sizeof() với một biến char khai báo trong chức năng chính, kết quả là 1 trong cả hai trường hợp!giá trị trả về của toán tử sizeof() trong C & C++

+3

gì làm cho '1' một câu trả lời có thể chấp nhận hơn' 4'? – Paddyd

+0

@Paddyd Vì 'sizeof (char)' là '1' trong cả C và C++? –

+0

@Paddyd vì kích thước của char là bao nhiêu! Sự khác biệt này không được biết đến với tôi, và vì vậy 1 là rõ ràng – mac93

Trả lời

30

Vì, và điều này có thể gây sốc, C và C++ là không cùng ngôn ngữ.

C xác định các ký tự chữ cái có loại int, trong khi C++ coi chúng là loại char.

Đây là một trường hợp hằng số đa nhân vật có thể hữu ích:

const int foo = 'foo'; 

Điều đó sẽ tạo ra một số nguyên có giá trị có thể sẽ được 6.713.199 hoặc 7.303.014 tùy theo byte đặt hàng và tâm trạng của trình biên dịch. Nói cách khác, các ký tự nhân vật nhiều ký tự không phải là "di động", bạn không thể phụ thuộc vào giá trị kết quả dễ dự đoán.

Khi người nhận xét đã chỉ ra (cảm ơn!) Điều này có giá trị trong cả C và C++, có vẻ như C++ tạo các ký tự nhân vật đa ký tự thành một loại khác. Tài giỏi!

Ngoài ra, dưới dạng ghi chú nhỏ mà tôi muốn đề cập khi về chủ đề, lưu ý rằng sizeof không phải là hàm và giá trị của size_t không phải là int. Như vậy:

printf("the size of a character is %zu\n", sizeof 'a'); 

hoặc, nếu trình biên dịch của bạn quá cũ không hỗ trợ C99:

printf("the size of a character is %lu\n", (unsigned long) sizeof 'a'); 

đại diện cho cách đơn giản nhất và chính xác nhất để in các kích thước bạn đang điều tra.

+0

[Các chữ số Multicharacter cũng hợp pháp trong C++] (http://stackoverflow.com/q/19394141/1009479) –

+1

C++ cũng có các ký tự nhiều ký tự, với kiểu 'int' và giá trị được xác định. –

+0

tại sao tôi nhận được 'cảnh báo: ký tự loại chuyển đổi không xác định 'z' ở định dạng' trong khi sử dụng'% zu'? – noufal

2

Trong C, 'a' là hằng số ký tự, được coi là số nguyên, vì vậy bạn có kích thước là 4, trong khi trong C++, nó được coi là char.

thể câu hỏi trùng lặp Size of character ('a') in C/C++

0

Bạn ví dụ là một trong những trường hợp C++ không tương thích với C. Trong API C mà trả về một ký tự đơn (như getch) trở lại và int vì điều này cho phép không gian cho một marker EOF (-1). Vì vậy, vì lý do này nó thấy 'c' như một int.

C++ giới thiệu người vận hành và chức năng quá tải có nghĩa là chúng ta có lẽ muốn để xử lý

cout << 'c' 

cách khác nhau để:

cout << 99 
Các vấn đề liên quan