我有一个使用 ocilib 和 mysql header 的 C 代码。 在我的某些机器上,我没有 ocilib 或 mysql,并且我希望能够选择使用/不使用 header 来编译我的代码,我可以这样做吗? 需要说明的是,代码中定义了 ocilib 和 mysql,所以我可能想在编译时将它们也删除。
示例:
#include <regex.h>
#include <time.h>
#include <ocilib.h>
void main(){
MYSQL *conn;
OCI_Connection* cn;
OCI_Statement* st;
char *db_type=NULL;
.....
....
if (strcasestr(db_type,"mysql")){/* mysql */
if (!mysql_real_connect(conn, db_host,db_user, db_password, db_schemata, 0, NULL, 0)) {
syslog (LOG_NOTICE,"%s\n", mysql_error(conn));
return;
}
....
}else{/* oracle*/
OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT);
....
}
}
我希望我说得足够清楚.. 谢谢!
最佳答案
您可以在代码中插入条件编译指令(#ifdef
... #endif
是规范的),以有选择地启用或禁用相关 # 的编译include
指令。然而,正如 @MichaelWalz 在评论中观察到的那样,仅抑制 header 可能会破坏代码的其余部分 - 如果没有,那么您应该删除那些 #include
。
此外,如果您在特定环境中没有 header ,那么您似乎也没有包含这些 header 声明的函数的库。假设您包含 header ,因为您的代码依赖于其中一些函数,那么一旦编译了程序,无论有 header 还是没有 header ,您都将无法链接该程序。
因此,只有当您在代码中需要的任何地方使用条件编译解决方案来消除对给定库功能(包括相关 header )的所有依赖时,条件编译解决方案才有效。这种方法相对常见,但要改造到最初不是为此设计的系统并不容易。
关于我可以用 C 编译选定的 header 代码吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179970/