作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在阅读一些模拟器代码,我反驳了一些非常奇怪的事情:
switch (reg){
case 'eax':
/* and so on*/
}
这怎么可能?我以为你只能 switch
整数类型。是否发生了一些宏观诡计?
最佳答案
(只有您可以回答“宏技巧”部分 - 除非您粘贴更多代码。但是这里没有多少宏可以使用 - 正式地,您不能重新定义关键字;这样做的行为是未定义的。)
为了实现程序的可读性,机智的开发人员正在利用实现定义的行为。 'eax'
不是字符串,而是一个多字符常量。非常仔细地注意 eax
周围的单引号字符。在您的情况下,它很可能会为您提供一个 int
,该字符组合是唯一的。 (通常每个字符在 32 位 int
中占据 8 位)。每个人都知道您可以在 int
上switch
!
最后,一个标准引用:
C99 标准说:
6.4.4.4p10: "The value of an integer character constant containing more than one character (e.g., 'ab'), or containing a character or escape sequence that does not map to a single-byte execution character, is implementation-defined."
关于c - 此源代码在 C 中打开一个字符串。它是如何做到的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45550674/
我是一名优秀的程序员,十分优秀!