環境變量的構成
環境變量由一對字符串組成,格式為:變量=關聯值。例如:
PATH=C:\WINDOWS
在DOS和WINDOWS中,你可以從命令行或在批處理文件中定義環境變量,方法是使用SET命令,後面跟賦值表達式。下面是一個創建環境變量的例子,
SET VERSION=1.1.3
在Unix中可以省略前面的SET,寫為:
VERSION=1.1.3
讀取環境變量
程序只有在啟動時才能訪問到環境變量,環境變量由一個字符串數組構成,其形式為“VAR=value”。可以用getenv()和putenv()函數從程序中訪問環境變量。
ANSI C 的函數getenv()提供了輕松簡便的訪問環境變量的方法,這個函數在<stdlib.h>中聲明,原型如下:
char * getenv(const char * name);
如果函數調用成功,它返回環境變量的字符串值。如果變量沒有被定義,函數返回空(NULL)。例如:
#include <stdlib.h>
#include <stdio.h>
int main()
{
char * descr = getenv("PATH");
if (descr)
printf("value of PATH is: %s", descr);
else
printf("variable not defined");
}
設置環境變量
為了定義環境變量或者改變現存的變量值,使用putenv()函數。這個函數不是由標准的ANSI/ISO定義的。在實際應用中,Unix和Windows都將這個函數作為非標准擴展定義在<stdlib.h>文件中,它是可移植的。其原型如下:
int putenv(const char * var);
參數var必須是字符串,而且格式必須是“VAR=VAL”。putenv()將變量VAR添加到當前的環境變量中,並賦值VAL。如果變量已存在, putenv()覆蓋現存的值。如果你不想覆蓋現存變量的值,就先調用getenv()來檢查變量是否存在,然後再調用putenv()。下面的例子是添加一個名為TEMP的環境變量,賦值為C:\TEMP(注意反斜槓在C/C++字符串中的表示方法)。如果調用成功,putenv()返回0,否則返回-1。
int stat = putenv("TEMP=C:\\TEMP");
if (!stat)
{
printf("環境變量定義失敗");
}
支持寬字符集變量
Win32中也能定義getenv()和putenv()的寬字符集版本。注意_wputenv()使用於NT和Win2000:
wchar_t * _wgetenv(const wchar_t * name);
int _wputenv(const wchar_t * var);
環境變量的使用
環境變量的作用就是你不用改變源文件,不用重編譯便可以控制程序的行為。例如,你可以通過定義環境變量控制程序是否顯示debug信息。,如果你需要在客戶處進行debug輸出,環境變量就特別有用,以下就是一個這方面的例子,如果定義了環境變量DBG:
void func();
#include <stdlib.h>
#include <stdio.h>
int main()
{
bool debug=false;
if (getenv("DBG"))
debug=true;
if (debug)
printf("calling func");
func();
if (debug)
printf("returned from func");
}