關於C++&Java中命令列編譯的問題 (轉)

worldblog發表於2007-12-14
關於C++&Java中命令列編譯的問題 (轉)[@more@]

本文講述有關C++/C和中命令列編譯的有關知識.:namespace prefix = o ns = "urn:schemas--com::office" />

在實際中,有時會碰到main()帶引數的情景。記得我第一次在Borlan C++ Builder裡面生成一個控制檯的時候, 程式自動生成了一個帶引數的main():

void main(int argc, char * argv[])

當時覺得很奇怪, 現在明白了, 透過main()的引數給程式增加一些處理資訊,可以使程式和實現更多互動式的通訊. 如果你的程式需要命令列引數編譯的話,那麼源程式的主函式main()就需要帶引數—也就是所謂的命令列引數。帶有引數的main()函式頭格式為:

void main(int argc, char * argv[]) 或void main(int argc, char ** argv)

其實,argc和argv也可以寫成其他的合法識別符號(ntifier)來表示,我在這裡遵從一般情況.

下面來看看這兩個引數的具體含義:

第一個引數argc是int型的,它用來存放命令列引數的個數,實際上argc所存放的數值比命令列引數的個數多1,即將命令字(可名)也計算在內。

第二個引數argv是一個一維的一級指標陣列,它是用來存放命令列中各個引數和命令字的字串的,並且規定:

argv[0]存放命令字

argv[1]存放命令列中第一個引數

argv[2]存放命令列中第二個引數

這裡,argc的值和argv[]各元素的值都是自動組賦值的。

在這裡講述帶引數的main()函式實際上是對指標陣列應用的一個具體例項。

下面是一個可以進行命令列引數編譯的具體例子(VC++6.0下透過):

//test.cpp

#include

void main(int argc, char *argv[])

{

cout<

cout<

if (argc>1)

{ cout<

for (int i=1; i

cout<

}}

上述原始檔經過編譯連線後生成可執行檔案test.exe. 然後在VC中, 我們進行如下設定: 在 Project--&gtSetting --&gtDe--&gtProgram Arguments裡面任意設定命令列引數(隨便輸入啦):

This is the first time I post documents here.^_^

然後執行,看看你會得到什麼結果……自己分析一下吧…

 

C++中的命令列和Java中的命令列編譯有些小小的差別, 對於用public static void main(String args[])作為函式入口的Java程式, args[0] 放命令列中第一個引數,arg[1] 存放命令列中第二個引數…這和C/C++語言是不相同的.還有,在Java裡面沒有相應的規定一個引數來存放命令列的個數(反正我沒找到),而在C++/C裡面有argc.這裡提供一個Java程式設計師裡面的一道關於命令列編譯的題目:

//Test_87.java

public class Test_87{

public static void main (String []args) {

String foo = args[1];

String bar = args[2];

String baz = args[3];

System.out.println("baz=" + baz);

}

}

編譯後執行命令: java Test_87 1 2 3 4

螢幕輸出的結果是:

baz=4

(1.4下除錯透過.)

 

請各位多多指教.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993479/,如需轉載,請註明出處,否則將追究法律責任。

相關文章