我正在阅读 libcurl,但遇到了一件不清楚的事情。有一个函数 curl_getenv()。据记载,它是在考虑成为 stdlib.h 中函数 genenv() 的包装器的情况下完成的(该函数的完整描述)
但是拿不到,怎么办?
在支持 C 语言的任何地方/所有平台上都支持 C 语言的标准功能。
那么,为什么要编写一个具有相同参数且不简化工作的包装器呢?不是没用吗?
该curl_getenv
功能与getenv
c lib中的功能不同,您可以从代码中看到它,我认为它很清楚-):
static
char *GetEnv(const char *variable)
{
#ifdef _WIN32_WCE
return NULL;
#else
#ifdef WIN32
char env[MAX_PATH]; /* MAX_PATH is from windef.h */
char *temp = getenv(variable);
env[0] = '\0';
if(temp != NULL)
ExpandEnvironmentStringsA(temp, env, sizeof(env));
return (env[0] != '\0')?strdup(env):NULL;
#else
char *env = getenv(variable);
#ifdef __VMS
if(env && strcmp("HOME",variable) == 0)
env = decc_translate_vms(env);
#endif
return (env && env[0])?strdup(env):NULL;
#endif
#endif
}
char *curl_getenv(const char *v)
{
return GetEnv(v);
}
如果环境变量的名称或它们所包含的字符串对于每个平台都略有不同怎么办?然后使用包装器可以使您隐藏差异。