首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在标头和源中都包括<stdbool.h>?

在标头和源中都包括<stdbool.h>?
EN

Stack Overflow用户
提问于 2014-02-03 04:57:11
回答 2查看 2.2K关注 0票数 3

我仍然是新的C。我有一个关于源文件和头文件的问题。我有这样一个头文件:

代码语言:javascript
复制
#ifndef MISC_H_
#define MISC_H_
#define BYTE 8

#include <stdbool.h>
#include <stdio.h>
#include "DataStruct.h"

bool S_areEqual(char *firstString, char *secondString); /* (1) */
bool S_randomDataStructureCheck(char *string, DataStruct *data); /* (2) */

#endif
  1. 函数参数中使用了bool,因此,我在源中也使用了它。我必须同时在头文件和源文件中进行#include <stdbool.h>吗?在哪些情况下我愿意,哪些地方我不愿意?
  2. 如果在标题中用作函数参数的另一个头文件中有一个ty清晰度,该怎么办?我必须同时在头文件和源文件中进行#include "DataStruct.h"吗?

标准是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-03 05:03:25

不,您不必同时包含在头文件和源文件(.c)中。如果您已经包含在源包含的标题中,那么它也将对源可用。当某些标头依赖于其他标头时,包含头的顺序可能很重要。有关更多细节,请参见this answer

作为旁白,你会注意到台词

代码语言:javascript
复制
#ifndef MISC_H_
#define MISC_H_

这确保头只包含一次。

更新

从评论中:

那么在源中,您只包含了它各自的头吗?

如果您的意思是,源文件应该只包含其各自的头,那么它将取决于。通常,文件应该包括它们需要的文件。

如果源文件需要一个头文件,但是它自己的头文件不需要该头文件,那么包含应该放在源文件中,而不是它的头文件中。原因之一是,每个文件只包含它所需的文件,这在概念上更清晰,因此很容易判断出依赖项是什么。另一个原因是它减少了变化的影响。

让我们看一个例子。假设您有foo.c和foo.h,而foo.c需要foodep.h编译,但是foo.h没有:

备选案文1: foo.h

#包括"foodep.h“

现在假设还有许多其他文件foo1.h、foo2.h、foo3.h等等,包括foo.h。然后,对foodep.h的任何更改都会影响所有其他文件及其依赖的头文件和源文件。

备选案文2: foo.c

#包括"foodep.h“

现在,没有其他文件具有foodep.h的可见性。对foodep.h的更改只影响foo.c。

通常,尝试应用与面向对象编程相同的实践-封装和最小化更改的范围。

票数 3
EN

Stack Overflow用户

发布于 2014-02-03 05:18:51

查看这一点的简单方法是,您应该始终包含提供在程序中使用的函数/别名/宏的标头,无论它们是否实际需要包含,都应该留给编译器处理。

这是因为每个标头都是在#ifdef - #endif子句下定义的,其条件是某些特定于头的宏(如果您定义了自己的标头,则有必要这样做,以避免多个包含,从而避免痛苦的编译器错误)。

因此,我的建议是,如果在程序中使用bool,则应该包括stdbool.h。如果编译器已经将其包含在其他标头的定义中,那么它将不再包含stdbool

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21519960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档