繁体   English   中英

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

[英]Can I expand #include files inline and not expand directives?

我正在尝试简化应用程序的部署。 为了在最终用户的计算机上构建最终应用程序,需要编译几个C文件。 这意味着需要将数十个头文件与应用程序一起提供。 我希望能够预先包含include文件的内容, 但是我还需要能够在内联include之后控制指令( #if等)。 我找不到一个cpp选项,可以让我仅包含标头,而不进行其余的预处理。 我有什么选择?

例:

文件1.h

void dummy_func()
{return;}

文件2.h

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

最后,我想要一个文件,内容为:

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

使用#ifdef控制要编译的#if节怎么样?

为了在最终用户的计算机上构建最终应用程序,需要编译几个C文件。 这意味着需要将数十个头文件与应用程序一起提供。

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

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

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

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的工具将导致无限输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM