我可以扩展#include文件内联而不是扩展指令吗?

时间:2010-01-05 19:21:31

标签: c++ include c-preprocessor

我正在尝试简化应用程序的部署。为了在最终用户的机器上构建最终应用程序,需要编译几个 C 文件。这意味着需要将许多头文件与应用程序一起发送。我希望能够预先包含包含文件的内容,但是我还需要能够在包含后控制指令(#if等)在内衬。我找不到一个cpp选项,它允许我只包含标题,而不进行其余的预处理。我有什么选择?

示例:

File1.h

void dummy_func()
{return;}

File2.h

#if INCLUDE_FILE1
    #include "file1.h"
#endif

最后,我想要一个文件说:

#if INCLUDE_FILE1
void dummy_func()
{return;}
#endif

3 个答案:

答案 0 :(得分:0)

如何使用#ifdef来控制编译哪些#if部分?

答案 1 :(得分:0)

  

为了在最终用户的机器上构建最终应用程序,需要编译几个C文件。这意味着需要将许多头文件与应用程序一起发送。

那又怎样?如果你将所有文件(包括标题)放入tarball中,并且你有一个理智的构建系统(你至少有一个Makefile,不是吗?),有一个问题是什么?很多文件?

答案 2 :(得分:0)

由于双重包含警卫,内联#includes的工具可能会导致一个巨大的文件,其中许多标题完全位于#ifndefs内部,不匹配。在极端情况下,它甚至可能导致无限大小的输出文件,如果包含是递归的(由于双重包含警卫,这通常不是问题)。

我刚刚确认此代码已成功编译:

main.cpp中:

#include "a.h"
int main() { return 0; }

A.H:

#ifndef A_H_INCLUDED
#define A_H_INCLUDED

#include "b.h"

#endif

b.h:

#ifndef B_H_INCLUDED
#define B_H_INCLUDED

#include "a.h"

#endif

由于您希望保持ifdef不受影响和未解析,因此内联#includes的工具会导致无限输出。

相关问题