vim “error:stray '\XXX' in C++ program”:为什么会发生这种情况?

mzillmmw  于 2023-05-07  发布在  其他
关注(0)|答案(4)|浏览(118)

我正在用C++写一个小程序,遇到了一个奇怪的错误:

src/Makefile/Tool.cpp:42:3: error: stray ‘\302’ in program
src/Makefile/Tool.cpp:42:3: error: stray ‘\240’ in program

我用Vim写了这个程序,对应的行(显示隐藏字符)是:

>--->---std::vector<std::string> { "--debug" }$

这个问题不是关于解决这个错误,因为我只需要复制回该行,错误原因就消失了。

看来这个错误是由一些字符引起的,甚至在激活所有相关选项后被Vim隐藏!

问题是可能导致这些错误的原因。

zzzyeukh

zzzyeukh1#

"\302\240"U+00A0 NO-BREAK SPACE的UTF-8。Vim通常不会将其突出显示为任何特殊的东西,因此即使您启用了'list'模式,也有可能潜入其中。
您可以使用以下命令突出显示它们:

:set listchars+=nbsp:.

或者任何你喜欢的角色

rkue9o1l

rkue9o1l2#

如前所述,这是由于您的源代码中的一些不可见字符。
一个很好的解决方案是在八进制模式下编辑文件,您将能够“看到”这些字符:

od -c MyClass.hpp

然后你可以看到八进制流中的“陌生人”:

0001240   t       s   t   r   i   n   g   &       n   a   m   e       )
0001260       { **302 240**   t   h   i   s   -   >   n   a   m   e       =
0001300       n   a   m   e   ;       }  \n  \n  \n  \t  \t  \t  \t   /

这两个粗体字符是导致以下消息的原因:
错误:程序中的“\302”
然后,您可以删除它们并重建。

ezykj2lf

ezykj2lf3#

对我来说,这个问题来自于从Web浏览器复制我的代码。
我尝试在Vim中执行:%s/ / /g,将所有空格替换为真实的空格,但失败了。
我删除了报告此错误的所有行的白色,并再次插入空格字符。这是劳动密集型的,但似乎是我能找到的唯一解决方案。

vmdwslir

vmdwslir4#

我也遇到了同样的问题,那就是每行前空格的字符编码。这是由于从与Exchange ServeriCloud同步的notes程序中复制而发生的。我所需要做的就是使用Notepad将所有奇怪的空间应用并替换为正常的空间,然后再次正常编译。

相关问题