【发布时间】:2012-04-19 02:36:45
【问题描述】:
我将在本示例中使用 openssl 安装的标头结构:
/usr/include (或 Windows 框中包含搜索路径中的某个文件夹) | + --openssl | +-- e_os2.h +-- rsa.h +-- 沙.h .../usr/include 在编译器中包含搜索路径。 OpenSSL 标头通常以这种方式包含:#include <openssl/sha.h>
作为第一行,openssl/sha.h 包含:#include <openssl/e_os2.h>。
所以,我的问题是:安装的标头以这种方式引用同一文件夹中的标头真的是个好主意吗?当它以这种方式引用 e_os2.h 时,它可能会从其他位置获取 e_os2.h,不一定在与 sha.h 相同的文件夹中。例如,如果我在某个位置有一个 openssl 的本地副本,并以这种方式包含该 sha.h:#include "../../3rdpath/openssl/sha.h,那么通过组合不兼容的标头版本,我可能会在我的代码中遇到一些讨厌的错误。
考虑到编译器在 #incldue <...> 与 #incldue "..." 方面的行为不同这一事实,对于像 openssl 这样的库来说,包含其标头的正确方法是什么?
我认为,openssl 的做法是最错误的做法。其他两种方式是:
a) #include "e_os2.h"
和
b) #include "./e_os2.h"
openssl的方式是:
c) #include
按照 openssl 的方式做这个决定是不是很糟糕? a) 或 b) 有什么问题吗? b) 意味着仅包含来自同一文件夹的 e_os2.h,所有主要编译器(ms cl、armcc、intel cl、gcc 等)都能保证吗?
【问题讨论】:
标签: c++ c c-preprocessor