[英]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.