首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >int x= 'fooo‘是编译器扩展吗?

int x= 'fooo‘是编译器扩展吗?
EN

Stack Overflow用户
提问于 2009-03-30 22:33:16
回答 5查看 1.1K关注 0票数 4

我看到并使用了C++代码,如下所示:

代码语言:javascript
复制
int myFourcc = 'ABCD';

它适用于GCC的最新版本,不知道最近的版本。这个特性在标准中吗?叫什么来着?

我在网上找它有困难.

编辑:

我也发现了这个信息,对于未来的观察者来说:

来自gcc文献

编译器一次对多字符字符常量进行赋值,将每个目标字符的位数所留下的先前值移动,然后将新字符的位模式截断为目标字符的宽度。最后的位模式是int类型,因此是有符号的,不管单个字符是否有符号(与GCC的3.1及更早版本相比略有变化)。如果常量中的字符比目标int中的字符多,编译器将发出警告,而多余的前导字符将被忽略。 例如,对于具有8位字符的目标,“ab”将被解释为(int) ((unsigned char) 'a' * 256 + (unsigned char) 'b')', and '\234a' as (int) ((无符号字符) '\234‘* 256 +(无符号字符)’a‘)。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-30 22:38:40

“请注意,根据C标准,字符常量的长度没有限制,但包含多个字符的字符常量的值是实现定义的。最近版本的GCC提供支持多字节字符常量,而不是错误警告--字符常量或警告:在这种情况下,生成字符常量的时间过长。”

票数 6
EN

Stack Overflow用户

发布于 2009-03-30 22:47:20

见C99标准第6.4.4.4节第10段:

整数字符常量具有int类型。包含映射到单字节执行字符的单个字符的整数字符常量的值是映射字符表示为整数的数值。包含多个字符(例如'ab')的整数字符常量的值,或者包含不映射到单字节执行字符的字符或转义序列的值,都是实现定义的。如果整数字符常量包含单个字符或转义序列,则其值为char类型的对象(其值为单个字符或转义序列的值)转换为int类型时所产生的值。

回想一下,实现定义意味着实现(在本例中是C编译器)可以做它想做的任何事情,但是它的必须是文档化的

大多数编译器都会将其转换为与单个字符对应的八进制连接对应的积分常量,但根据目标体系结构的endianness,endianness可以是小的,也可以是大端的。

因此,可移植代码不应该使用多字符常量,而应该使用普通的积分常量.使用0x61626364或0x64636261代替可能具有两种功能的'abcd',它们都知道endianness (分别是大的和很少的)。

票数 7
EN

Stack Overflow用户

发布于 2009-03-30 22:38:29

C++标准草案规定:

字符文字是用单引号括起来的一个或多个字符,如'x‘。

包含多个c-char的普通字符文字是多字符文字。多字符文字具有int和实现定义的值类型。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/699301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档