如何使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>之间的区别?

+2

'srting'和'string.h'是不同的头。如果旧版本不区分,那么可能会被视为错误。我看不到你可以告诉'g ++'不要区分它们。 – taskinoor

+0

作为解决方法,你可能会迫使GCC始终包括''用'-include' – Jarod42

+0

我敢肯定GCC 2.95.3得到这个权利,所以我不认为有周围4.1.2回归。相反,我认为你在混合使用C和C++规则。 C++头文件_may_包含其他头文件。特别是,'''_may_ include''。你无法依靠这种方式。 – MSalters

  1. 在您的项目中创建一个目录(我们称之为foo);
  2. 创建foo/string和以取其头工作符号链接;
  3. 添加-Ifoo到GCC的编译标志。当你包括<string><string.h>现在将被用来

两个符号链接,并重定向到实际的系统头。

我看过stringstring.h通常以文件的形式实现(第一个string文件名没有扩展名)。

不包括标准包括你需要指定路径:-nostdinc