如何使g++不区分<string>和<string.h>

How to make g++ do NOT distinguish <string> and <string.h>

本文关键字:gt string lt 不区 g++ 何使      更新时间:2023-10-16

最近,我遇到了一个非常烦人的问题。我需要编译一些旧的C++代码,这些代码是用非常旧的g ++版本4.1.2编译的。

我现在找不到那么旧的 g++ 版本,所以我使用 g++ 4.4.7 来编译它,但是有很多错误,比如error: ‘snprintf’ was not declared in this scope.

经过一些工作,我发现 g++ 4.1.2 不能区分<string><string.h>,也<stdio><stdio.h>等。但是 g++ 4.4.7 确实如此。所以这些错误发生了。

由于某些原因,我无法修改旧的源代码。有没有办法让较新的 g++ 忽略<string><string.h>之间的差异?

  1. 在你的项目中创建一个目录(我们称之为foo(;
  2. 创建foo/stringfoo/string.h作为指向任何标题的符号链接;
  3. -Ifoo添加到 GCC 的编译标志中。

现在,当您包含<string><string.h>时,将使用这两个符号链接,并将重定向到实际的系统标头。

我见过stringstring.h通常仅作为文件实现(文件名的第一个string没有扩展名(。

要不包含标准包含路径,您需要指定:-nostdinc