自己写的程序,在编译时报了一堆错误,如下所示。
mmap_test.c: In function ‘main’:
mmap_test.c:16:2: error: stray ‘\357’ in program
start = (char *)mmap(NULL,128,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
^
mmap_test.c:16:2: error: stray ‘\274’ in program
mmap_test.c:16:2: error: stray ‘\214’ in program
In file included from /usr/include/x86_64-linux-gnu/bits/mman.h:45:0,
from /usr/include/x86_64-linux-gnu/sys/mman.h:41,
from mmap_test.c:6:
mmap_test.c:16:34: error: expected ‘)’ before numeric constant
start = (char *)mmap(NULL,128,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
^
mmap_test.c:16:18: error: too few arguments to function ‘mmap’
start = (char *)mmap(NULL,128,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
一直找不到原因,在网上查找原因,说的比较多的原因是代码编码格式的问题。我查看了一下自己的代码的编码格式为UTF8,又查看了一下我自己的其他程序的格式也是UTF8格式的,但不会编译出错。基本上可以确定不是这个原因造成的。
后来自己看代码,发现了问题所在。在start = (char *)mmap(NULL,128,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);这一段代码中,128后面的逗号,打成了中文的逗号,所以会报错。更正之后程序可以正常运行了。
总结:程序中使用了中文的符号,比如中文的逗号、引号、括号等会导致上面的错误。而且这种问题不太好查,因为有些中文的符号和英文符号很相似。