這種條件編譯形式與前面介紹的形式的唯一差異是第一行的ifdef改為ifndef.其意義是當標識符末被定義時,程序段1參與編譯,程序段2不參與編譯;否則,反之。在上述形式中,當程序段2不出現時,可簡寫成: # infdef 標識符 程序段 # endif 9.4 帶參數的主函數 在操作系統下執行某個C程序,是環境對C程序的啟動,可以看作是對該程序的main()函數的調用。main()函數執行結束后,控制返回環境。為能從環境向C程序傳遞信息,啟動C程序的命令行可帶有任選的參數。命令行的一般形式為 程序名 參數1 參數2……參數n 其中程序名和各參數之間用空白符分隔。 為能讓main()函數讀取命令行中的參數,環境將多個參數以兩個參數形式傳遞給main()函數、其中第一個參數(習慣記作argc) 表示命令行中參數的個數(包括程序名);第二個參數(習慣記作argv)是一個字符指針數組。其中argv[0] 指向程序名字符串的第一個字符,argv[1]指向參數1字符串的第一個字符,…,argv[argc-1] 指向最后一個參數字符串的第一個字符。如果利因山等于1,則表示程序名后面沒有參數。下面的例子用于說明main()函數對參數argc 與argv的引用方法。 「例9.l」 回打啟動程序時的命令行各參數。 # include<stdio.h> void main(int argc, char *argv[] /* 或char **argv; */) { int k; for( k=l; k<argc; k++) printf(“%c”,argv[k],k<argc-1?'':'\n' ); printf(“\n\n”); } 如上述程序的執行程序名為echopro.exe,執行該程序的命令行為: echopro Hello world! 則程序將輸出 Hello world! 在以上命令行中,根據約定,main()函數的參數argc的值為3;argv[0],argv[1],argv[2]分別指向字符串“echopro”、“Hello”、“world!”的第一個字符。在程序的printf()函數調用中,字符輸出格式%c輸出一個字符,若是已輸出了命令行最后一個參數,該格式將輸出一個換行符,若是輸出其它參數,則輸出一個空白符。 因函數的數組參數是指向數組首元素的指針變量,所以在主函數main()中可對argv施行增量運算。例如,在argv[0]指針指向程序名字符串的第一個字符情況下,對argv施增量運算++argv后,argv[0](或*argv)就指向參數1的第一個字符c利用argv的這一性質,可改寫上述程序為以下形式: # include<stdio.h> void main(int argc,char **argv) { while(——argc>0) printf(“%s%c”,*++argv,argc>1? '':'\n'); } 這里,++argv使指針argv先加1,讓它一開始就指向參數1;逐次增回,使它遍歷指向各參數。又利用函數printf()的第一個格式參數是字符串表達式,上述程序對printf()的調用可改寫成: printf((argc> l) ? “%s”:“%s\n”,* ++argv); 「例9.2」 假定啟動程序時給出的命令行參數是一串整數,程序將全部整數求和后輸出。 # include<stdio.h> # include<math.h> void main( int argc,char **argv) { int k,s; for(s=0, k=l; k<argc; k++) s+=atoi(*++agv); /* 從數字字符串譯出整數 */ printf( “\t%d\n”, s); } |
| 熱門資料下載: |
| < |
| 自考最新熱貼: |
【責任編輯:育路編輯 糾錯】 |
|
閱讀上一篇:高級語言程序設計知識點總結七 |
|
閱讀下一篇:高級語言程序設計課程考前串講講義二 |
|
|
| 【育路網版權與免責聲明】 | |
| ① 凡本網注明稿件來源為"原創"的所有文字、圖片和音視頻稿件,版權均屬本網所有。任何媒體、網站或個人轉載、鏈接、轉貼或以其他方式復制發表時必須注明"稿件來源:育路網",違者本網將依法追究責任; | |
| ② 本網部分稿件來源于網絡,任何單位或個人認為育路網發布的內容可能涉嫌侵犯其合法權益,應該及時向育路網書面反饋,并提供身份證明、權屬證明及詳細侵權情況證明,育路網在收到上述法律文件后,將會盡快移除被控侵權內容。 | |
熱點專題 |