我应该把结构放在哪里才能在整个工作区上访问它?

Where should i place the struct for it to be accessible on the entire workspace?

创建 header 文件时,有时我需要访问我在其他 header 文件中声明的其他结构。目前我通过将 #include Directive 作为一棵树来组织它,这样如果我需要从 a 调用 b 中的 struct 我放置 a header 在 main 中的 b 下方。 可能是一种不好的做法 I am NEW to C.. don't be harsh :P 我应该在哪里声明结构以使其在整个代码中都可以访问?

我是否应该创建一个包含所有结构的 header 文件,然后通过 #include Directive 调用它 在所有 header 文件上?为初学者声明结构的最佳做法是什么。

我目前可以访问在其他 header 文件中声明的其他结构

//main file


#include "b.h"
#include "a.h" <--- I had to put a.h underneath b.h to access to the struct in b.h named test
#include "c.h" 

如果 struct A 的 header 文件需要了解 struct B,那么定义 struct A 的 header 文件本身应该包含一个 #include 指令包含 struct B 的 header 文件,如果它是在不同的文件中定义的话。

没有必要 fiddle 与主源文件中 #include 指令的顺序来回走动。

只要所有 header 文件都有适当的 header 防护措施来防止同一 header 文件被包含两次,那么这应该不是问题。

文件 mystruct.h 的 header 守卫可能如下所示:

#ifndef MYSTRUCT_H_INCLUDED
#define MYSTRUCT_H_INCLUDED

//the main content of the header file goes here

#endif

这将在第一次包含 header 文件时设置预处理器宏,当第二次包含该文件时,预处理器将看到该宏已经设置,并将忽略文件的其余部分。

在许多编译器上,只需编写

就足够了
#pragma once

作为 header 守卫进入 header 文件,而不是使用上面提到的三行。但是,这可能不适用于所有编译器。有关详细信息,请参阅以下 C++ 问题(也应适用于 C):

#pragma once vs include guards?