^M导致的编译出错

来源:互联网 发布:部落冲突数据大全2016 编辑:程序博客网 时间:2024/06/03 17:30

有时候我们会在Windows下编写代码,然后再放到Linux下进行编译。此时就会涉及到两个系统对换行符的解释了。不同的解释,就会造成一些奇怪的错误。


1、问题描述

在SourceInsight上查看main()函数,这么一看,没啥毛病。
这里写图片描述

但是当我将该文件放到Linux上使用gcc进行编译,编译出错,提示第322行出错,但是322行是return 0;没啥毛病啊。
这里写图片描述

我把321行和322行屏蔽掉,再次编译,同样会出错,出错跟上次不一样。
这里写图片描述

这里写图片描述

在Linux系统中打开这个文件,发现有个奇怪的地方,在a test中间有个^M的字符。
这里写图片描述

这个字符在Linux会被解释成换行,于是上面就等价于:
这里写图片描述

这就能解释为什么第二次编译会出现那种出错了。在Windows下我们看不出^M的存在,看起来像是个空格,但是在Linux下^M会影响到整个代码的格式,于是有可能会出现错误。

要模拟上述的情况其实很简单。在SourceInsight可以插入一个ASCII字符。
Edit -> Special Edit -> Insert ASCII..
输入0xd的字符就可以出现^M了。


2、Windows/Linux对换行的解释

Windows:     0D0A Unix\Linux:  0A MAC:         0D

3、删除^M

使用dos2unix工具,将dos下的文件转换成unix下的文件。

#dos2unix filename
阅读全文
0 0
原创粉丝点击