关于字符常量这个极其简单却让人抓狂的问题

Unix10 2011-01-29 04:17:46
  话说昨天深夜写程序,一个神奇的Bug折腾得我死去活来。后来终于发现问题所在,这里简单说下,并想向大家问问未来的发展趋势。
  话说字符常量,最基本的东西了:'c'。问题是你知道它占多大内存空间吗?来个小程序看看:

/* char.c */
#include <stdio.h>
int main() {
printf("sizeof(char) = %d\n", sizeof(char));
printf("sizeof('c') = %d\n", sizeof('c'));
printf("sizeof(L'c') = %d\n", sizeof(L'c'));
printf("sizeof('中') = %d\n", sizeof('中'));
return 0;
}

  来看看输出:

 操作系统:Fedora 14 64bit;
 编译器:GCC 4.5.1 64bit;
 编译命令:gcc char.c -o charC //C语言,输出charC
sizeof(char) = 1
sizeof('c') = 4
sizeof(L'c') = 4
sizeof('中') = 4
 操作系统:Fedora 14 64bit;
 编译器:GCC 4.5.1 64bit;
 编译命令:g++ char.c -o charCPP //C++语言,输出charCPP
sizeof(char) = 1
sizeof('c') = 1
sizeof(L'c') = 4
sizeof('中') = 4
 操作系统:Windows 7 64bit;
 编译器:VC 16.00.30319.01 32bit;
 编译命令:cl char.c /TC /FecharC.exe //C语言,输出charC.exe
sizeof(char) = 1
sizeof('c') = 4
sizeof(L'c') = 2
sizeof('中') = 4
 操作系统:Windows 7 64bit;
 编译器:VC 16.00.30319.01 32bit;
 编译命令:cl char.c /TP /FecharCPP.exe //C++语言,输出charCPP.exe
sizeof(char) = 1
sizeof('c') = 1
sizeof(L'c') = 2
sizeof('中') = 4

  结果不分析了,想和大家探讨下未来发展趋势。
...全文
99 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2011-01-29
  • 打赏
  • 举报
回复
最基本的c、C++基础语法差异,不看标准,就拼命试编译器,越分析越偏差。
zhangsongcui 2011-01-29
  • 打赏
  • 举报
回复
问一下,'中'是什么东西?
只知道L'中'和"中"
iambic 2011-01-29
  • 打赏
  • 举报
回复
这可以算是C语言的一个败笔,不过已经习以为常了,现在知道就好了。不过因为这个导致出错,多半还是代码风格有问题吧。
飞天御剑流 2011-01-29
  • 打赏
  • 举报
回复
这其实是个简单问题,如果楼主熟悉标准,就不会这么大惊小怪了。c与c++的字符常量的类型是不同的,c中的字符常量类型是int,所以也叫整数字符常量,但c++字符常量的类型有很大区别,单字节字符常量的类型是cha,多字节字符常量的类型则是int
Unix10 2011-01-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 thefirstz 的回复:]

vs2010 10.0.30319.1
[/Quote]
你这是Visual Studio 2010的版本,不是C/C++编译器的版本。
昵称很不好取 2011-01-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mstlq 的回复:]
引用 2 楼 thefirstz 的回复:

再给楼主贴一个vs2010的结果:
sizeof(char) = 1
sizeof('c') = 1
sizeof(L'c') = 2
sizeof('中') = 4

哈哈,这个是c++的结果,注明一下嘛……
[/Quote]
昵称很不好取 2011-01-29
  • 打赏
  • 举报
回复
vs2010 10.0.30319.1
Unix10 2011-01-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 thefirstz 的回复:]

再给楼主贴一个vs2010的结果:
sizeof(char) = 1
sizeof('c') = 1
sizeof(L'c') = 2
sizeof('中') = 4
[/Quote]
你可以看一下你VS2010的编译器版本,就是我用的VC 16.00.30319.01
昵称很不好取 2011-01-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mstlq 的回复:]
引用 2 楼 thefirstz 的回复:

再给楼主贴一个vs2010的结果:
sizeof(char) = 1
sizeof('c') = 1
sizeof(L'c') = 2
sizeof('中') = 4

哈哈,这个是c++的结果,注明一下嘛……
[/Quote]
恩,C++的,呵呵
mstlq 2011-01-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 thefirstz 的回复:]

再给楼主贴一个vs2010的结果:
sizeof(char) = 1
sizeof('c') = 1
sizeof(L'c') = 2
sizeof('中') = 4
[/Quote]
哈哈,这个是c++的结果,注明一下嘛……
昵称很不好取 2011-01-29
  • 打赏
  • 举报
回复
再给楼主贴一个vs2010的结果:
sizeof(char) = 1
sizeof('c') = 1
sizeof(L'c') = 2
sizeof('中') = 4
bdmh 2011-01-29
  • 打赏
  • 举报
回复
sizeof('c') ,这个会把'c'看成一个整数

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧