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 に答える