原因1:代码没有编译进去
解决方法:可以重新clean后编译,或者touch一下文件,让编译器认为文件已经更改了,需要编译
原因2:换行符不统一
先补充三个知识点:
1、Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”,即“\r”。
2、vim输入\r,在输入模式下,Ctrl+v,然后Ctrl+m
3、dos2unix和unix2dos可以将文件的每行结尾在Unix和Windows系统相互转化
根据实验结果推测:对于结尾是\r\r\n,编译的时候如果一行里面遇到\r\n会认为是一行结束,这一行里面还有\r,则认为又是新的一行,即vim和gdb里面看到的是一行再加上^M,而编译器认为是两行,所以导致行号对不上。
为何有的代码里面有^M也不会有问题:文件是单独的\n结尾,编译器和gdb/vim会将这个\r和后面的\n连起来认为是以\r\n结束的,都认为是同一行
解决方法:去掉^M