![](/img/trans.png)
[英]Why doesn't the C preprocessor ignore invalid directives in blocks it skips?
[英]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.