是否可以使用#define更改#include文件名?

sac*_*owl 7 c++ c-preprocessor

我正在使用一些旧的C++代码,这些代码显然是在标准化之前iostream.h进行的iostream,并且从其开始,以及其他类似的代码.因此,我的相对现代版本的g ++在尝试时失败#include <iostream.h>等.

我很好奇是否可以使用预处理器通过命令行将实例更改iostream.h为just iostream.我试过附加-Diostream.h=iostreamg ++,但这似乎并没有改变include语句.

我猜测预处理器不可能修改include语句?

R S*_*ahu 8

#include声明有三种形式.

# include "h-char-sequence" new-line

# include <h-char-sequence> new-line

# include pp-tokens new-line
Run Code Online (Sandbox Code Playgroud)

哪里pp-tokens必须扩展到前两种形式之一.

你可以使用:

#include IOSTREAM
Run Code Online (Sandbox Code Playgroud)

并使用-DIOSTREAM="<iostream>"-DIOSTREAM="<iostream.h>"取决于您正在使用的编译器版本进行编译.

但是,你不能使用

#include <iostream.h>
Run Code Online (Sandbox Code Playgroud)

并编译-Diostream.h=iostream.

这有几个问题.

  1. iostream.h 不是有效的预处理器宏.
  2. #include声明的形式不适合宏观扩张.

如果您准备迁移代码库以使用新的C++标头,那么最好使用您喜欢的脚本方法将所有旧式C++标头更改为新的C++标头.