循环声明预处理器指令?或者定义之前包括?

Jak*_*son 0 c++ include c-preprocessor

我对C++有点新意,所以请耐心等待.我正在试图弄清楚我#defines#includes我的项目到底在哪里.我有这样的事情:

main.h

#include "other.h"

#define MAX_GROUPS 100

struct Cat
{
    int something[MAX_GROUPS];
}
Run Code Online (Sandbox Code Playgroud)

other.h我还需要使用MAX_GROUPS,那么我也定义MAX_GROUPSother.h这样的:

other.h

#define MAX_GROUPS 100

struct Other
{
     int taco[MAX_GROUPS];
}
Run Code Online (Sandbox Code Playgroud)

问题是我定义了一个不止一个地方.我想把它们放在一起.

或者,我会重新加入main.h吗?

other.h

#include "main.h"

struct Other
{
     int taco[MAX_GROUPS];
}
Run Code Online (Sandbox Code Playgroud)

这里的问题我认为它就像一个循环的依赖性东西.main.h包括other.h哪些包括main.h哪些包括other.h哪些包括...

设置项目的定义和包含的最佳方法是什么,以便将事物排序到其他包含的文件?通常的做法是在包含之前简单地完成所有定义吗?

jan*_*anm 5

最小化循环依赖关系对于维护项目非常重要.有关扩展讨论,请参阅John Lakos撰写的"大规模C++软件设计".

要避免您遇到的特定问题,请在一个头文件中定义值,并在每个需要它的文件中包含该头文件.要避免多个定义出现问题,请使用include guard:

#ifndef HEADER_THING_H
#define HEADER_THING_H

/* Rest of the header file goes here. */

#endif
Run Code Online (Sandbox Code Playgroud)

这样,如果已经包含它,它是无害的.