C++ Arduino库中包含文件的冲突
我正在编写Arduino库,其文件夹结构如下:C++ Arduino库中包含文件的冲突,c++,arduino,C++,Arduino,我正在编写Arduino库,其文件夹结构如下: libraries +Foo -Foo.h -Helper.h +Bar -Bar.h -Helper.h +Helper -Helper.h Foo和Bar是我创建的库。将Helper.h放在文件夹中的原因是,最终用户将更容易让库工作。此外,某些库只能通过编辑其源代码进行配置 但是,如果我在my中编写#include,就不可能控制包含哪个“Helper.h” 有没有办法从草图
libraries
+Foo
-Foo.h
-Helper.h
+Bar
-Bar.h
-Helper.h
+Helper
-Helper.h
Foo和Bar是我创建的库。将Helper.h放在文件夹中的原因是,最终用户将更容易让库工作。此外,某些库只能通过编辑其源代码进行配置
但是,如果我在my中编写#include
,就不可能控制包含哪个“Helper.h”
有没有办法从草图中隐藏
Helper.h
和Bar
显而易见的答案是:不要写#包括。你的
文件不是实现的一部分,应该包括在内
使用#包括“Helper.h”
。如果你这样做,首先
编译器将查找目录中的包含文件
包含包含它的文件:如果包含它
从Foo/Foo.h
,编译器将选择Foo/Helper.h
;如果包括
从Bar/Bar.h
,编译器将拾取Bar/Helper'
和
等等
客户端代码应该只设置根目录的include路径,并且
类似于#的内容包括“Foo/Foo.h”
;如有需要,他们也可以
是否包含“Foo/Helper.h”
对于这一策略,你必须做的一件事是确保
所有头部防护装置的唯一性。如果这是一个
在应用程序中,通常足以损坏路径
进入防护罩,例如,使用Foo\u Helper\u h
,而不仅仅是
Foo_h
。或者(我会将此用于任何库)
哪些第三方应使用),为其生成一些随机字符串
包括警卫。(如果我打开一个名为abc.h
的文件
不存在,我的编辑器会自动生成以下内容
样板:
/********************************************************/
/* File: abc.h */
/* Author: J. Kanze */
/* Date: 02/05/2013 */
/* ---------------------------------------------------- */
#ifndef abc_h_20130502O481MBxFZeAzz4dgIb7iC4Q9
#define abc_h_20130502O481MBxFZeAzz4dgIb7iC4Q9
#endif
这是一个安全的赌注,包括警卫在这里永远不会冲突
(你必须按照这些思路做些事情
无论如何,为了在文件中获得您的版权信息。)刚刚找到了一种似乎可以解决问题的方法:
libraries
+Foo
-Foo.h
+extra
-Helper.h
+Bar
-Bar.h
+extra
-Helper.h
+Helper
-Helper.h
这样,Foo
和Bar
中的Helper.h
将对客户端不可见,我可以编写#包括“extra/Helper.h”
分别在Foo
和Bar
中添加所需文件。是的,不要将Foo
、Bar
或Helper
添加到include路径,并包括Foo/Helper.h
和Bar/Helper.h
。或者想出比Helper.h
更好的名称>只是一个占位符名称,你可以把它想象成Fat16.h
或类似的东西。你能再详细解释一下并把它变成一个答案吗?这里有点难理解。