簡體   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