事实上,如果我将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
?
答案 0 :(得分:4)
那些不包括警卫。如果系统中存在相应的头,则设置这些宏。在配置期间检测到如果将它们无条件地包括在内并且它们不存在,则编译将失败。
答案 1 :(得分: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
脚本生成,该脚本会检查标头文件的可用性。