与负数进行比较时,程序中出现杂散“\342”
Posted
技术标签:
【中文标题】与负数进行比较时,程序中出现杂散“\\342”【英文标题】:Stray '\342' in program when doing comparisons with negative numbers与负数进行比较时,程序中出现杂散“\342” 【发布时间】:2014-06-07 20:07:08 【问题描述】:每当我与负数进行比较时,GCC 都会向我显示:
error: stray '\342' in program
if ( -4 < ÔÇô3 ) return 1;
^
compilation terminated due to -Wfatal-errors.
代码:
int main()
if ( -4 < –3 ) return 1;
return 0;
【问题讨论】:
使用合适的文本编辑器编写代码。 我认为很明显哪个角色导致了问题。这是一个改变的连字符。愚蠢的website 没有办法分享我可以看到的结果,但是i.imgur.com/Q6QtHCm.png。将其与normal hyphen 进行比较。 这是重复的。规范是 Compilation error: stray ‘\302’ in program, etc.. 你没有漏掉接下来报告的两个杂散字符(在这种情况下它们形成一个单元)?其中许多以 342(八进制)开头:U+200B (342 200 213, ZERO WIDTH SPACE), U+2013 (342 200 223, EN DASH), U+2014 (342 200 224, EM DASH) 和U+2212 (342 210 222, MINUS SIGN)。 OK,这里贴出的代码,最接近源代码的是342 200 223。342 200 223(八进制)→0xE2 0x80 0x93(十六进制)→Unicode代码点U的UTF-8序列+2013 (EN DASH)。大多数具有regular expression 模式的文本编辑器(例如Geany(Linux 和Windows)和Notepad++)将能够使用\x2013
搜索/替换Unicode 代码点U+2013。
【参考方案1】:
数字 3 之前的破折号是一个 Unicode 字符,看起来像破折号。删除它,然后插入一个新的破折号,就可以了。
如果您使用复制粘贴,请注意,因为粘贴的代码可能包含 Unicode 字符,这可能会导致这样的编译错误。
如果您手动将其输入到编辑器中,请使用其他编辑器或更改编辑器的设置,不要将标准连字符转换为其他字符。例如,Microsoft Word 会进行这种转换,但我希望您没有在 Word 中编写代码。
错误信息的解释:
您以 UTF-8 字符集保存了文件。您使用的更改后的连字符保存为三个连续字节:0xE2 0x80 0x93
(十六进制值)
g++ 逐字节解析文件。它首先遇到0xE2
,它认为它无效并输出error: stray '\342' in program
。 342
是 0xE2
的八进制表示。而\342
是有效的 C++ 代码,它是 0xE2 字符的转义版本。详见C++escape sequences,\nnn
表示八进制nnn
数字所代表的字符。
【讨论】:
如果您不使用自动将-
转换为–
的编辑器,您将不会有任何问题。我认为这不是一个安全的假设:如果是,OP 就不会问这个问题。
@hvd 感谢您的评论,我已经更新了答案。我怀疑幕后有一些复制粘贴。以上是关于与负数进行比较时,程序中出现杂散“\342”的主要内容,如果未能解决你的问题,请参考以下文章