2

この例では、opensslでインストールされたヘッダー構造を使用します。

/ usr / include        (またはWindowsボックスのインクルード検索パス内のいくつかのフォルダー)
  |
  + --openssl
       |
       +-e_os2.h
       +-rsa.h
       +-sha.h
      ..。

/usr/includeコンパイラには検索パスが含まれています。OpenSSLヘッダーは通常、次のように含まれます。#include <openssl/sha.h>

最初の行として、openssl/sha.hには次のものが含まれています#include <openssl/e_os2.h>。だから、私の質問:インストールされたヘッダーが同じフォルダ内のヘッダーをそのように参照するのは本当に良い考えですか?そのようにe_os2.hを参照する場合、必ずしもsha.hと同じフォルダーにあるとは限らない、他の場所からe_os2.hを取得する可能性があります。たとえば、openssl includeのローカルコピーがある場所にあり、そのsha.hをこのようにインクルードした#include "../../3rdpath/openssl/sha.h場合、互換性のないバージョンのヘッダーを組み合わせることで、コードに厄介なバグが発生する可能性があります。

#incldue <...>コンパイラーがopenssl#incldue "..."のようなlibにヘッダーを含めるための適切な方法とは異なる動作をするという事実を考慮しますか?

私は、opensslのやり方がそれを行う最も間違った方法だと思いました。他の2つの方法は次のとおりです。

a)#include "e_os2.h"

b)#include "./e_os2.h"

opensslの方法は次のとおりです。

c)#include <openssl / e_os2.h>

opensslで行われている方法を実行するというのは悪い決断ですか?a)またはb)に問題はありますか?b)同じフォルダーからのみe_os2.hを含めることを意味しますが、すべての主要なコンパイラー(ms cl、armcc、intel cl、gccなど)で保証されていますか?

4

1 に答える 1

3

あなたの最初の選択肢は、間違ったことをするのに最もオープンです。他のライブラリに完全に属するヘッダーのパッケージで、指定された名前のファイルを検索します。あなたの2番目のものはせいぜい未定義の振る舞いを与えます。ほとんどの場合、それが機能するとは思わないでしょう。3番目の方法は正しい方法です。これには、opensslのバージョンのファイルのみが含まれます。インクルードパスに別の不完全なディレクトリを配置してヘッダーを置き換えるように調整した場合はopenssl、何をしているのかを知っていると思います。

于 2012-04-19T02:48:06.997 に答える