【发布时间】:2018-12-21 08:50:01
【问题描述】:
鉴于以下 sn-p 代码,每个 .h 和 .cpp 文件中都有预处理器技巧,是否可以按照调用函数的顺序评估相关的预处理器函数?对于必须维护它的程序员来说,我怎样才能强制执行它而不带来很多困难?
#include "Foo.h"
#include "Bar.h"
#include "Qux.h"
int main()
{
Foo foo = Foo();
Bar bar{};
foo.doFoo();
Qux::doQux();
return 0;
}
编辑: 一些澄清,让我们假设 Foo、Bar、Qux .cpp 和 .h 声明预处理器定义。 我可以强制预处理器在 Qux.h 之前评估 Foo.h、Foo.cpp、Bar.h 和 Bar.cpp 吗?
【问题讨论】:
-
预处理器在编译器之前运行。预处理器不知道函数调用是什么,编译器运行得太晚而无法干预。预处理器函数/宏在读取时就被评估,通常是因为
#include。 -
“按照调用函数的顺序评估关联的预处理器函数”是什么意思?示例代码与问题有什么关系?
-
@bathsheba 每当我没有被邀请参加聚会时,我都会自己做
#include,这是真的 -
@SombreroChicken:你是因为未定义的行为,还是因为渗透测试失败而导致它崩溃?
-
@bathsheba 不是所有成功的渗透测试都未定义行为吗?导致产生子进程或不依赖于架构?
标签: c++ c++17 preprocessor