与负数进行比较时,程序中出现杂散“\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 program3420xE2 的八进制表示。而\342 是有效的 C++ 代码,它是 0xE2 字符的转义版本。详见C++escape sequences,\nnn表示八进制nnn数字所代表的字符。

【讨论】:

如果您不使用自动将- 转换为 的编辑器,您将不会有任何问题。我认为这不是一个安全的假设:如果是,OP 就不会问这个问题。 @hvd 感谢您的评论,我已经更新了答案。我怀疑幕后有一些复制粘贴。

以上是关于与负数进行比较时,程序中出现杂散“\342”的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试编译此程序时,程序错误中出现杂散的“#”

g++ 错误:程序中出现杂散“\177”

leetcode刷题笔记342 4的幂

数组628. 三个数的最大乘积

php的IP转换成整型函数ip2long()易出现负数

python网格搜索支持向量回归得分低,为0.003,偶尔还会出现负数,该怎么处理?