如何使G ++不辨和
问题描述:
最近,我遇到了一个非常恼人的问题。我需要编译一些旧的C++代码,这些代码是用一个非常古老的g ++版本4.1.2编译的。如何使G ++不辨<string>和<string.h>
我现在找不到g ++版本,所以我用g ++ 4.4.7来编译它,但是有很多错误,比如error: ‘snprintf’ was not declared in this scope
。
一些工作后,我发现G ++ 4.1.2切勿从<string.h>
从<stdio.h>
等区分<string>
,也<stdio>
。不过G ++ 4.4.7一样。所以这些错误发生了。
由于种种原因,我不能修改旧的源代码。有没有办法可以让新的g ++忽略<string>
和<string.h>
之间的区别?
答
- 在您的项目中创建一个目录(我们称之为
foo
); - 创建
foo/string
和以取其头工作符号链接; - 添加
-Ifoo
到GCC的编译标志。当你包括<string>
或<string.h>
现在将被用来
两个符号链接,并重定向到实际的系统头。
答
我看过string
和string.h
通常以文件的形式实现(第一个string
文件名没有扩展名)。
不包括标准包括你需要指定路径:-nostdinc
'srting'和'string.h'是不同的头。如果旧版本不区分,那么可能会被视为错误。我看不到你可以告诉'g ++'不要区分它们。 – taskinoor
作为解决方法,你可能会迫使GCC始终包括''用'-include' –
Jarod42
我敢肯定GCC 2.95.3得到这个权利,所以我不认为有周围4.1.2回归。相反,我认为你在混合使用C和C++规则。 C++头文件_may_包含其他头文件。特别是,'''_may_ include''。你无法依靠这种方式。 –
MSalters