簡體   English   中英

使C預處理程序忽略某些#include指令

[英]Make the C preprocessor ignore certain #include directives

我在這里使用解析器生成器,不幸的是堅持要放置一個

#include <some/file.h>

在每個生成的源文件的頂部。 標題早已被重命名。 雖然強制編譯器(gcc)使用帶有-include new/header.h的新頭文件沒問題,但是從每個生成的文件中刪除上述指令會使構建過程復雜化。

有沒有辦法告訴gcc簡單地忽略some/file.h

用一個空文件替換some/file.h

不。您可以對生成的文件進行后處理-我說:不!

或者,您可以僅添加“。” 到系統包含目錄(或本地包含路徑的任何內容-確保它也是<>系統包含路徑)。

然后創建一個“ some”目錄,並將自己的永久“ file.h”粘貼在其中,其中包含#include的一行,並擺脫-include。

我猜有某些原因可能無法正常工作-因為在使用-include之前,這似乎是一件更直接,更容易理解的事情。 特別是因為您可以注釋傳遞文件以說明發生了什么。

為什么不建立從some / file.h到new / header.h的符號鏈接,並刪除-include指令?

#include <some/file.h>

可能開始像

#ifndef _FILE_H_
#define _FILE_H_

如果是這樣,只需在#include命令之前添加#define _FILE_H_ ,它應該忽略它。 不過,我不確定這是否是最佳解決方案。

嘗試使用預處理程序指令,例如#if和#ifdef以及gcc -DSYMBOL = value命令行標志。

例如,如果使用gcc -DREQUIRE_STDC = 1 -o myfile.o myfile.c進行編譯,並且您的.c文件包含:



#if defined(REQUIRE_STDC) && defined(__STDC__)
#include "some/file.h"
#else
#include "another/file.h"
#endif /* defined(REQUIRE_STDC) && defined(__STDC__) */

如果有兩個定義和STDC符號REQUIRE_STDC它將編譯使用“一些/ file.h”。 另外,您的標頭可能包含正確的指令,以避免同一文件被多個包含:



#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE 1

/* your C declarations here */

#endif /* MY_HEADER_FILE */

另外,您可以閱讀gcc預處理程序手冊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM