簡體   English   中英

來自Arduino庫的包含文件沖突

[英]Conflict of include files from an Arduino library

我正在編寫Arduino庫,文件夾結構如下:

libraries   
  +Foo
    -Foo.h
    -Helper.h   
  +Bar
    -Bar.h
    -Helper.h   
  +Helper
    -Helper.h

Foo和Bar是我創建的庫。 將Helper.h放在其文件夾中的原因是,最終用戶將更輕松地使庫開始工作。 另外,某些庫只能通過編輯其源代碼來進行配置。

但是,如果我在草圖中編寫#include <Helper.h> ,將無法控制要包括的“ Helper.h”。

有沒有辦法從草圖中隱藏FooBar Helper.h

顯而易見的答案是:不要編寫#include <Helper.h> 您的文件不是實現的一部分,應使用#include "Helper.h"包括在內。 如果這樣做,編譯器將首先在包含該文件的目錄中查找包含文件:如果從Foo/Foo.h包含它,則編譯器將選擇Foo/Helper.h 如果從Bar/Bar.h包含它,編譯器將選擇Bar/Helper' ,依此類推。

客戶端代碼應僅將包含路徑設置為根,並執行#include "Foo/Foo.h" 如有必要,他們還可以執行#include "Foo/Helper.h"

使用此策略必須做的一件事是確保所有標頭防護的唯一性。 如果這是一個應用程序,通常將路徑Foo_Helper_h到包含保護中就足夠了,例如,使用Foo_Helper_h而不是Foo_h 或者(我將把它用於第三方應使用的任何庫),為include保護生成一些隨機字符串。 (如果打開了一個不存在的名為abc.h的文件,我的編輯器會自動生成以下樣板:

/********************************************************/
/*      File:       abc.h                               */
/*      Author:     J. Kanze                            */
/*      Date:       02/05/2013                          */
/* ---------------------------------------------------- */

#ifndef abc_h_20130502O481MBxFZeAzz4dgIb7iC4Q9
#define abc_h_20130502O481MBxFZeAzz4dgIb7iC4Q9

#endif

可以肯定的是,這里的include防護不會與其他任何沖突。 (而且無論如何,您都必須按照這些原則做一些事情,以便在文件中獲得版權信息。)

只是想出了一種看似可以解決問題的方法:

libraries   
  +Foo
    -Foo.h
    +extra
      -Helper.h   
  +Bar
    -Bar.h
    +extra
      -Helper.h   
  +Helper
    -Helper.h

這樣, FooBar Helper.h對客戶端是不可見的,我可以在FooBar分別編寫#include "extra/Helper.h"以包括所需的文件。

暫無
暫無

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

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