我对C ++有点新意,所以请耐心等待。我正在试图弄清楚我的#defines
和#includes
在我的项目中的确切位置。我有这样的事情:
main.h
#include "other.h"
#define MAX_GROUPS 100
struct Cat
{
int something[MAX_GROUPS];
}
在other.h
中我还需要使用MAX_GROUPS
,因此我还要在MAX_GROUPS
中定义other.h
,如下所示:
other.h
#define MAX_GROUPS 100
struct Other
{
int taco[MAX_GROUPS];
}
问题是我在不止一个地方定义了一个常数。我想把它们放在一起。
或者,我是否重新加入main.h
?
other.h
#include "main.h"
struct Other
{
int taco[MAX_GROUPS];
}
这里的问题我认为它的存在就像一个循环的依赖性东西。 main.h
包括other.h
,其中包含main.h
,其中包含other.h
,其中包括等等...
为项目设置定义和包含的最佳方法是什么,以便将事物排序到其他包含的文件?通常的做法是在包含之前简单地完成所有定义吗?
答案 0 :(得分:5)
最小化循环依赖关系对于维护项目非常重要。有关扩展讨论,请参阅John Lakos的“大规模C ++软件设计”。
要避免您遇到的特定问题,请在一个头文件中定义值,并在每个需要它的文件中包含该头文件。要避免多个定义出现问题,请使用include guard:
#ifndef HEADER_THING_H
#define HEADER_THING_H
/* Rest of the header file goes here. */
#endif
如果它已经包含在内,那就无害了。
答案 1 :(得分:2)
因为main.h #includes other.h,所以不需要再次#define MAX_GROUPS。它将从包含中获取该定义。
答案 2 :(得分:0)
通常,您应该将定义放在相关的标题内 - 或者主要使用它的位置。在这种情况下,您应该将MAX_GROUPS放在other.h中。通过在main.h中包含other.h,也可以获取定义(如jwismar所述)。
但是,对于更大的项目,最好创建一个只包含清单常量(定义)的头文件,并在需要的地方包含它。
答案 3 :(得分:0)
你也可以保护你的常数不受重新定义的影响......
#ifndef MAX_GROUPS
#define MAX_GROUPS 100
#endif