關於C++&Java中命令列編譯的問題
本文講述有關C++/C和JAVA中命令列編譯的有關知識.
在實際編程中,有時會碰到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也可以寫成其他的合法標識符(identifier)來表示,我在這裡遵從一般情況.
下面來看看這兩個參數的具體含義:
第一個參數argc是int型的,它用來存放命令列參數的個數,實際上argc所存放的數值比命令列參數的個數多1,即將命令字(可執行檔名)也計算在內。
第二個參數argv是一個一維的一級指標數組,它是用來存放命令列中各個參數和命令字的字串的,並且規定:
argv[0]存放命令字
argv[1]存放命令列中第一個參數
argv[2]存放命令列中第二個參數
…
這裡,argc的值和argv[]各元素的值都是系統自動組賦值的。
在這裡講述帶參數的main()函數實際上是對指標數組應用的一個具體執行個體。
下面是一個可以進行命令列參數編譯的具體例子(VC++6.0下調試通過):
//test.cpp
#include <iostream.h>
void main(int argc, char *argv[])
{
cout<<"The number of command line arguments is:"<<argc<<endl;
cout<<"The program name is:"<<argv[0]<<endl;
if (argc>1)
{ cout<<"The command line arguments:\n";
for (int i=1; i<argc; i++)
cout<<argv[i]<<endl;
}}
上述源檔案經過編譯串連後產生可執行檔test.exe.
然後在VC中,
我們進行如下設定:
在 Project-->Setting -->Debug-->Program 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
(JDK1.4下調試通過.)
請各位多多指教.