相关疑难解决方法(0)

C包括警卫究竟做了什么?

我有一个关于在C中包含警卫的问题.我已经做了一些阅读,但我会欣赏一点澄清.

假设我有一个带有函数定义的头文件"header.h".

#ifndef HEADER_FILE
#define HEADER_FILE

int two(void){
return 2;
}

#endif
Run Code Online (Sandbox Code Playgroud)

这个头文件有一个包含保护.但是,我对#define HEADER_FILE实际上在做什么感到困惑.假设我忘记了包含守卫,完全忽略添加'#define HEADER_FILE'对我来说是完全合法的.

所以我的问题是:当我们定义HEADER_FILE时,我们到底在做什么?我们定义了什么?为什么忘记包含警卫是可以的,在这种情况下我们也忘了添加#define HEADER_FILE?

任何帮助表示赞赏!

c macros include-guards header-files c-preprocessor

6
推荐指数
2
解决办法
1万
查看次数

在定义结构时避免"重新定义typedef"警告

我正在定义一些引用彼此的结构,并在使用它们之前键入结构,因此每个结构都"了解"其他结构(没有这个就得到了编译错误).不确定这是否必要或正确.

现在用gcc编译时,我正在"重新定义typedef"警告.什么是正确的方法去做?

typedef struct a A;
typedef struct b B;
typedef struct c C;

struct a {
    B* list;
    A* parent;
};

struct b {
    A* current;
    B* next;
};

struct c {
    A* current;
    A* root;
};
Run Code Online (Sandbox Code Playgroud)

更新: 愚蠢,错误的复制粘贴导致此标头被包含在另一个文件中两次.我是C的新手,并认为它必须与文件中的结构两次有关.谢谢@Kevin Ballard的提醒.

c gcc struct typedef

1
推荐指数
1
解决办法
5262
查看次数