在linux下使用g++时,遇到了一个很奇怪的问题,我知道这问题的起因在于我自己,但是,我觉得g++的设计也脱不了干系。
问题很简单,假设hello.cpp内容只有一句话
编译一下,除了抱怨没有main函数之外,没有其它的错误。
如果你在hello.cpp所在目录下新建一个string的文件,里面什么内容都可以,也可以没有内容。
然后,你再尝试编译一下,会出现大量的错误。基本都是追溯到iostream引用的那些底层头文件上去了,比如/usr/include/c++/4.4/bits/locale_classes.h或者/usr/include/c++/4.4/bits/ios_base.h之类的。如果string是个可执行文件,更是会出现./string: error stray '\3' in program之类的错,这个错误严重误导了我。当然,我如果细心一点,会发现./string已经提示我问题所在了。所以当我跳出当前目录(假设为cpp),再执行的时候问题就不存在了,这让我当时非常困惑。
现在想来,这样做没有问题是显然的了。
那么,问题的来源排除了,得到的教训是写程序不要与系统文件重名。
但是,还有一个很重要的问题是bits/locale_classes.h中的引用是
按理说,这种引用方式是先搜索系统目录/usr/include/c++/4.4,但本例显示,它确实先搜索了当前目录。
这是为什么呢?暂时不清楚
阅读(1599) | 评论(0) | 转发(0) |