前: Particular Declarations, 上: Declarations


5.7.2 一般的な宣言の調査

これらのマクロは,“特定の”テストマクロでカバーされていない宣言を調査す るために使用します.

— マクロ: AC_CHECK_DECL (symbol, [action-if-found], [action-if-not-found], [includes = `default-includes'])

symbol(関数や変数)がincludesで定義されていなくて宣言が必要な 場合,シェルコマンドaction-if-not-foundを実行し,それ以外では action-if-foundを実行します.includesが宣言されていない場合, デフォルトのインクルードが使用されます(see Default Includes).

このマクロは,必要でないときに余分な宣言を導入することを避けた方が安全な ので,symbolがr-valueとして有効かどうかを実際にテストし,実際に宣 言されているかどうかはテストしません.

— マクロ: AC_CHECK_DECLS (symbols, [action-if-found], [action-if-not-found], [includes = `default-includes'])

それぞれの(カンマで分けられているリスト)symbolsに対し, symbolが宣言されれいる場合はHAVE_DECL_symbolを(全て大 文字で)`1'に定義し,それ以外では`0'に定義します. action-if-not-foundが与えられている場合,関数宣言の一つが必要なと き実行するシェルコードを追加し,それ以外ではaction-if-foundが実行 されます.

このマクロは,最初の引数としてM4のリストを使用します.

          AC_CHECK_DECLS(strdup)
          AC_CHECK_DECLS([strlen])
          AC_CHECK_DECLS([malloc, realloc, calloc, free])
     

他の`AC_CHECK_*S'マクロと異なり,symbolが宣言されていないとき, HAVE_DECL_symbolを宣言しないままにする代わりに, HAVE_DECL_symbolは`0'で定義されます.調査の実行を 確かめているときは,HAVE_DECL_symbolをAutoconfの他の 結果と同じように,以下のように使用してください.

          #if !HAVE_DECL_SYMBOL
          extern char *symbol;
          #endif
     

しかし,テストが実行されていない場合,システムのものと衝突するような宣言 を使用するより,シンボルを宣言しない方が安全なので,以下のように 使用すべきでしょう.

          #if defined HAVE_DECL_MALLOC && !HAVE_DECL_MALLOC
          void *malloc (size_t *s);
          #endif
     

究極の状態でのみ二番目のカテゴリに分類されます.ファイルがコンフィグレー ションされずに使用されている場合か,コンフィグレーション時に使用されてい る場合のいずれかです.ほとんどの場合はこれまでの方法で十分です.