C++ 流浪者'\342';在程序中进行负数比较时

C++ 流浪者'\342';在程序中进行负数比较时,c++,gcc,compiler-errors,C++,Gcc,Compiler Errors,每次我与负数进行比较时,GCC都会向我显示: 错误:程序中出现杂散“\342” 如果(-4)返回1; ^ 编译因-Wfatal错误而终止。 代码: intmain(){ 如果(-4 342 是有效的C++代码,它是0xE2字符的转义版本。详见C++,代码> > NNN表示八进制 NNN>/代码>编号。< >使用适当的文本编辑器编写代码。我认为很明显哪个字符引起了问题。那是一个经过修改的连字符。Dumb没有办法分享我能看到的结果,但是。把它和a比较一下。这是重复的。典型的是。你没有漏掉报告的接下

每次我与负数进行比较时,GCC都会向我显示:

错误:程序中出现杂散“\342”
如果(-4)返回1;
^
编译因-Wfatal错误而终止。
代码:

intmain(){
如果(-4<-3)返回1;
返回0;
}

数字3前面的破折号是一个看起来像破折号的Unicode字符。删除它,并插入一个新的破折号,你会没事的

如果使用复制粘贴,那么要小心,因为粘贴的代码可能包含Unicode字符,这可能会导致类似这样的编译错误

如果在编辑器中手动键入,请使用其他编辑器或更改编辑器的设置,不要将标准连字符转换为其他字符。例如,Microsoft Word会进行此转换,但我希望您没有使用Word编写代码


错误消息的解释如下:

您已将文件保存在UTF-8字符集中。您使用的已更改连字符保存为三个连续字节:
0xE2 0x80 0x93
(十六进制值)


g++逐字节解析文件。它首先遇到它认为无效的
0xE2
,并在程序中输出
错误:杂散'\342'。
342
0xE2
的八进制表示。而<>代码> 342 是有效的C++代码,它是0xE2字符的转义版本。详见C++,代码> > NNN<代码>表示八进制<代码> NNN>/代码>编号。< >使用适当的文本编辑器编写代码。我认为很明显哪个字符引起了问题。那是一个经过修改的连字符。Dumb没有办法分享我能看到的结果,但是。把它和a比较一下。这是重复的。典型的是。你没有漏掉报告的接下来两个离群字符吗(在本例中,它们构成一个单元)?其中许多是以342(八进制)开头的:U+200B(342200213),U+2013(342200223),U+2014(342200224),和U+2212(342200222)。好的,这里发布的代码,离源代码最近,是342200223。342200223(八进制)→ 0xE2 0x80 0x93(十六进制)→ Unicode代码点U+2013()的UTF-8序列。大多数具有模式的文本编辑器(例如(Linux和Windows)和)将能够使用
\x{2013}
搜索/替换Unicode代码点U+2013。只有在不使用自动将
-
转换为
-
的编辑器的情况下,您才可以。我认为这不是一个安全的假设:如果是,OP就不会问这个问题。@hvd谢谢你的评论,我已经更新了答案。我怀疑幕后有复制粘贴。
int main() {
  if ( -4 < –3 ) return 1;
  return 0;
}