我可以在线扩展#include文件,而不是扩展指令?(Can I expand #include f

2019-10-28 13:26发布

我试图简化应用程序的部署。 为了构建一个最终用户的机器上的最终应用,一对夫妇的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

Answer 1:

由于双include防范,即内联的#includes可能导致一个巨大的文件的工具,那里有很多头的完全内部#ifndefs不匹配。 在极端情况下,它甚至可能导致无限大小的输出文件中,如果包括是递归的(通常是不因为双包括防护装置的一个问题)。

我只是确认这代码编译成功:

main.cpp中:

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

啊:

#ifndef A_H_INCLUDED
#define A_H_INCLUDED

#include "b.h"

#endif

BH:

#ifndef B_H_INCLUDED
#define B_H_INCLUDED

#include "a.h"

#endif

既然你想保留的ifdef原封不动,未分析,一种工具,内联#includes会导致无限输出。



Answer 2:

怎么样使用#ifdef来#如果部分被编译成控制哪些?



Answer 3:

为了构建一个最终用户的机器上的最终应用,一对夫妇的C文件需要编译。 这意味着,几十头文件必须与应用程序一起提供。

所以呢? 如果你把所有的文件(包括标题)成压缩包,和你有一个健全的构建系统( 至少有一个Makefile,不是吗?),什么是与具有大量文件的问题?



文章来源: Can I expand #include files inline and not expand directives?