C/C';a';中字符的大小(';)+; < C和C++中字符的大小是多少?据我所知,字符的大小在C和C++中都是1字节。

C/C';a';中字符的大小(';)+; < C和C++中字符的大小是多少?据我所知,字符的大小在C和C++中都是1字节。,c++,c,types,C++,C,Types,#include <stdio.h> int main() { printf("Size of char : %d\n", sizeof(char)); return 0; } #include <iostream> int main() { std::cout << "Size of char : " << sizeof(char) << "\n"; return 0; } Size of char

#include <stdio.h>
int main()
{
    printf("Size of char : %d\n", sizeof(char));
    return 0;
}
#include <iostream>
int main()
{
    std::cout << "Size of char : " << sizeof(char) << "\n";
    return 0;
}
Size of char : 1
Size of char : 4
Size of char : 1
Size of char : 1

#include <stdio.h>
int main()
{
    printf("Size of char : %d\n", sizeof(char));
    return 0;
}
#include <iostream>
int main()
{
    std::cout << "Size of char : " << sizeof(char) << "\n";
    return 0;
}
Size of char : 1
Size of char : 4
Size of char : 1
Size of char : 1
C++中的

#include <stdio.h>
int main()
{
    char a = 'a';
    printf("Size of char : %d\n", sizeof(a));
    printf("Size of char : %d\n", sizeof('a'));
    return 0;
}
#include <iostream>
int main()
{
    char a = 'a';
    std::cout << "Size of char : " << sizeof(a) << "\n";
    std::cout << "Size of char : " << sizeof('a') << "\n";
    return 0;
}

< C++ > <代码> >(代码)>为什么在C和C++中返回不同的值?< /强> < /p>

C,字符常量的类型,如<代码> 'A/Eng>实际上是<代码> int >代码>,大小为4(或其他一些实现依赖值)。在C++中,类型为“代码> char < /C>,大小为1。这是这两种语言之间的许多小差别之一。

< P>正如保罗所陈述的,因为<<代码> 'A/Eng>是C中的<代码> int >代码> C++中的<代码> char < /> >
<>我在几年前写的东西中,C和C++之间的特定差异,在:

< P> C中,字符字的类型在C++中是<强> int 和<强> char < />强。这是C++中对<强>支持函数重载的要求。请参见此示例:

void foo(char c)
{
    puts("char");
}
void foo(int i)
{
    puts("int");
}
int main()
{
    foo('i');
    return 0;
}
输出:

char

在C语言中,字符文字不是
char
类型。C将字符文字视为整数。因此,
sizeof('a')
sizeof(1)
之间没有区别

因此,sizeof字符文本等于C中的sizeof整数

<> >强> C++语言< /强>,字符文字是 char < />代码类型。发言人说:

1) 窄字符文字或普通字符文字,例如
'a'
'\n'
'\13'
。此类文字的类型为
char
,其值等于 在执行字符集中表示c字符。如果c-char是 在执行字符集中不能表示为单个字节 literal具有int类型和实现定义的值

>,在C++字符中,文字是一种类型:<代码> char < />代码>。因此,C++中字符文字的大小是一个字节。 Alos,在您的程序中,您对

sizeof
运算符使用了错误的格式说明符

C11§7.21.6.1(第9页):

#include <stdio.h>
int main()
{
    char a = 'a';
    printf("Size of char : %d\n", sizeof(a));
    printf("Size of char : %d\n", sizeof('a'));
    return 0;
}
#include <iostream>
int main()
{
    char a = 'a';
    std::cout << "Size of char : " << sizeof(a) << "\n";
    std::cout << "Size of char : " << sizeof('a') << "\n";
    return 0;
}
如果转换规范无效,则行为无效 未定义。275)如果任何参数不是 对应的转换规范,行为未定义。


>,您应该使用<代码> %ZU>代码>格式说明符,而不是<代码> %D<代码>,否则它在C++标准中是C.</P>中的未定义行为,它是C2.4.4.4中的节2.132.1,至少在DOC中得到。+ 1(除了“4的大小”显然适用于NTrEGEK的平台,它不一定适用于所有平台)。@ NTraceKe:我懒得引用这两个标准,但是C++标准中有一个与C不兼容的附录。在附录C.1.1中,它提到“字符文字的类型从<代码> int >代码>改为<代码> char < /代码>,这解释了行为。):NTraceKe:Po.4.4.4.4,第10段:整数字符常量的类型为int。包含映射到单字节执行字符的单个字符的整数字符常量的值是被解释为整数的映射字符表示形式的数值。“@nthrgeek:你不应该要求一个标准的推荐人,除非你对某一点有争论,并且你想理解为什么对方有不同的观点。如果大家都同意,就接受吧。您(作为一名开发人员)应该足够聪明,能够自己快速找到这样的常见答案。

“%|”
格式需要一个
int
参数(或者升级为
int
sizeof
生成类型为
size\u t
的结果。使用cast转换为
int
,或者,如果您的实现支持它,则使用
“%zu”
。只是好奇,但您是否正在更新(非常详细的)文档以包含C++11和C11中的新更改?目前还没有。在过去的五年里,我对C和C++的兴趣已经大大减少了。呃,我用你的作品来写,你就这样写了。世界真小<代码>%zu在许多平台上都不受支持,但为了更好地移植,请使用
(int)sizeof(char)
和format
%d
字符文本的值不一定是相应的ASCII码。这取决于源字符集和执行字符集,以及默认情况下
char
类型是有符号还是无符号。其他答案中未提及有趣的细节。谢谢