gpt4 book ai didi

c++ - 来自 Arduino 库的包含文件冲突

转载 作者:行者123 更新时间:2023-11-28 07:38:14 25 4
gpt4 key购买 nike

我正在编写 Arduino 库,文件夹结构如下:

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

Foo 和 Bar 是我创建的库。将 Helper.h 放在他们的文件夹中的原因是,最终用户将更容易让库工作。此外,某些库只能通过编辑其源代码来配置。

但是,如果我写 #include <Helper.h>在我的 sketch ,将无法控制我包含的“Helper.h”。

有没有办法隐藏Helper.h来自 FooBar从草图?

最佳答案

显而易见的答案是:不要写 #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_h .或者(我会将其用于任何图书馆第三方应该使用),生成一些随机字符串包括 guard 。 (如果我打开一个名为 abc.h 的文件不存在,我的编辑器自动生成如下样板:

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

#ifndef abc_h_20130502O481MBxFZeAzz4dgIb7iC4Q9
#define abc_h_20130502O481MBxFZeAzz4dgIb7iC4Q9

#endif

可以肯定的是,这里的 include 守卫永远不会冲突与任何其他。 (而且你必须沿着这些方向做一些事情无论如何,为了在文件中获取您的版权信息。)

关于c++ - 来自 Arduino 库的包含文件冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16343162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com