^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
- ^M导致的编译出错
- gcc库的链接顺序导致编译出错的问题
- 多个PCL库导致编译出错的问题
- Keil-原文件类型不明确导致编译出错的解决方法
- [编译相关]系列3:makefile或者config文件当中的空格或者注释导致编译出错
- 头文件交叉引用导致编译出错
- 踩坑,gcc 参数顺序导致编译出错?
- Visual Studio 2008的Vmware插件导致Visual Studio编译出错并异常退出的问题
- 由于ptrace.h文件导致的内核编译出错的解决方法
- 由于ptrace.h文件导致的内核编译出错的解决方法
- MSBUILD 命令行编译的时候请注意msbuild文件名称或路经中空格导致出错
- 升级ubuntu14.04之后导致编译linux kernel出错的解决
- 从网站拷贝到ultraEdit编辑器的代码导致交叉编译出错
- 使用make编译android项目时,修改了文件xml文件名称,导致编译出错的问题原因
- 莫名其妙的编译出错
- 宏定义错误导致编译出错——期待括号
- 360杀毒会导致mingw编译ffmpeg出错??
- 系统崩溃导致tomcat-users.xml不完整编译出错
- Win10安装Ration Rose2007
- SV中的interface
- VMware虚拟机安装centOS
- nginx与php-fpm 504 Gateway Time-out 排查与解决案例
- 如何不利用一个额外的变量来达到交换两个变量值的目的-------位上的异或运算
- ^M导致的编译出错
- HDU 4507 吉哥系列故事――恨7不成妻(求所有满足数的平方和)
- POJ 1286 Necklace of Beads (Polya定理)
- POJ3616Milking Time(DP)
- Hadoop on YARN参数配置讲解
- word3013,批量修改mathtype中的字体样式
- html你可能还不知道的一些知识点
- 最简单自定义dialog去除dialog黑边方法
- C++关键字