直接編譯,不用作者之前的參數(放在註解裏),
/* Compile with:
export CFLAGS="-g -Wall -std=gnu11 -O3" #the usual.
make getenv
#Sample usage
reps=10 msg="Ha" ./getenv
msg="Ha" ./getenv
reps=20 msg=" " ./getenv
*/
#include <stdlib.h> //getenv, atoi
#include <stdio.h> //printf
int main(){
char *repstext = getenv("reps");
int reps = repstext ? atoi(repstext) : 10;
char *msg = getenv("msg");
if (!msg) msg = "Hello.";
for (int i=0; i< reps; i++)
printf("%s\n", msg);
}
編譯出現提示的錯誤訊息
$ make getenv
cc getenv.c -o getenv
getenv.c: In function ‘main’:
getenv.c:20:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
for (int i=0; i< reps; i++)
^
getenv.c:20:5: note: use option -std=c99 or -std=gnu99 to compile your code
make: *** [getenv] Error 1
由此錯誤,可看出 gcc 預設用的標準,不是用C99及以後,在C99之前,不能直接宣告型別在for迴圈裏,
這可以做為昨日的一個複習。加深對C99/C11的了解。
這枝範例程式, 示範取得範例變數。
編譯完,使用方式為
#Sample usage
reps=10 msg="Ha" ./getenv
msg="Ha" ./getenv
reps=20 msg=" " ./getenv
從程式傳入兩個變數,reps, msg , 一個數字,一個字串,只要給定變數值,並在程式執行前傳入即可。
沒想到這樣用系統變數。