0

事实上,如果我包含stdlib.h到我的程序的每个文件中并且我没有得到重新定义错误。所以,答案是肯定的。正确的?

我正在阅读libxml2源代码,HTMLparser.c其中有这一部分:

#include <string.h>
#ifdef HAVE_CTYPE_H
#include <ctype.h>
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif

我的问题是:为什么include guards在这里使用?

4

2 回答 2

4

这些不包括警卫。如果系统中存在相应的标头,则设置这些宏。在配置过程中检测到。如果它们被无条件包含并且它们不存在,则编译将失败。

于 2012-06-19T13:51:35.090 回答
3

是的,系统标头中有包含防护。看看例如“string.h”:

/* Excerpt from GCC string.h */
/*
 *  ISO C99 Standard: 7.21 String handling  <string.h>
 */

#ifndef _STRING_H
#define _STRING_H   1

定义为

HAVE_CTYPE_H
HAVE_STDLIB_H

通常来自配置头文件,该头文件可以使用./configure检查头文件可用性的脚本生成。

于 2012-06-19T13:58:17.020 回答