Chinaunix首页 | 论坛 | 博客
  • 博客访问: 262966
  • 博文数量: 41
  • 博客积分: 2013
  • 博客等级: 大尉
  • 技术积分: 523
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-08 23:13
文章分类

全部博文(41)

文章存档

2010年(41)

我的朋友

分类: C/C++

2010-05-22 10:35:39

在linux下使用g++时,遇到了一个很奇怪的问题,我知道这问题的起因在于我自己,但是,我觉得g++的设计也脱不了干系。

问题很简单,假设hello.cpp内容只有一句话

#include<iostream>


编译一下,除了抱怨没有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),再执行的时候问题就不存在了,这让我当时非常困惑。

cd ..
g++ cpp/hello.cpp


现在想来,这样做没有问题是显然的了。

那么,问题的来源排除了,得到的教训是写程序不要与系统文件重名。

但是,还有一个很重要的问题是bits/locale_classes.h中的引用是

#include<string>

按理说,这种引用方式是先搜索系统目录/usr/include/c++/4.4,但本例显示,它确实先搜索了当前目录。
这是为什么呢?暂时不清楚
阅读(1599) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~