天天看點

各種語言執行入口的傳參方法

在作業系統中,執行程式時可以由系統傳入參數,就是在執行的時候,附帶上參數。比如:

<code>1</code>

<code>ping</code> <code>www.kryptosx.info</code>

後面跟着的網址就是ping的參數。

linux和windows的shell都遵循這個參數傳入方式。這裡列一下各種語言的執行入口傳參方法。主要分為兩類,一種是有main函數的語言,一種是沒有main函數的。

在執行指令的時候,linux系統會先對指令行進行分解。通常是以空格分解,如果有雙引号,雙引号内的也是認為是一個參數,無論裡面有無空格。

c類語言包括c和c++語言,他們的傳參方式一樣。都是在main函數中。c/c++語言中的main函數可以攜帶參數,隻是我們平常不用。

<code>int</code> <code>main(</code><code>int</code> <code>argc, </code><code>char</code><code>** argv)</code>

<code>2</code>

<code>int</code> <code>main(</code><code>int</code> <code>argc, </code><code>char</code><code>* argv[])</code>

argc  是指指令行輸入參數的個數(以空白符分隔),程式名也是包含在内的。

argv  是一個指向字元串數組的指針。

<code>01</code>

<code>#include &lt;stdio.h&gt;</code>

<code>02</code>

<code>int</code> <code>main(</code><code>int</code> <code>argc, </code><code>char</code> <code>** argv)</code>

<code>03</code>

<code>{</code>

<code>04</code>

<code>    </code><code>printf</code><code>(</code><code>"argc: %d\n"</code><code>,argc);</code>

<code>05</code>

<code>    </code><code>int</code> <code>i;</code>

<code>06</code>

<code>    </code><code>for</code> <code>(i=0; i &lt; argc; i++)</code>

<code>07</code>

<code>        </code><code>printf</code><code>(</code><code>"argv[%d] is %s\n"</code><code>, i, argv[i]);</code>

<code>08</code>

<code>    </code><code>getchar</code><code>();</code>

<code>09</code>

<code>    </code><code>return</code> <code>0;</code>

<code>10</code>

<code>}</code>

<code>play.exe a b c d </code><code>"hello sir"</code>

<code>argc: 6</code>

<code>3</code>

<code>argv[0] is play.exe</code>

<code>4</code>

<code>argv[1] is a</code>

<code>5</code>

<code>argv[2] is b</code>

<code>6</code>

<code>argv[3] is c</code>

<code>7</code>

<code>argv[4] is d</code>

<code>8</code>

<code>argv[5] is hello sir</code>

可以看出,傳給argv的字元串中,argc是整個輸入的指令被分解的段數(注意雙引号)。

shell腳本是沒有main函數的,它是個解釋性語言。但是我們也可以在運作時對其傳參。相對c語言而言,更為簡單。

shell是使用系統定義的位置變量。引用腳本參數時,可以使用$1到$9這9個變量。還有一個特殊點的變量是$*,它輸出所有參數(不包括程式名)。

<code>#!/bin/bash</code>

<code>echo</code> <code>"\$* is "</code><code>$*</code>

<code>echo</code> <code>"\$0 is "</code><code>$0</code>

<code>echo</code> <code>"\$1 is "</code><code>$1</code>

<code>echo</code> <code>"\$2 is "</code><code>$2</code>

<code>echo</code> <code>"\$3 is "</code><code>$3</code>

<code>echo</code> <code>"\$4 is "</code><code>$4</code>

<code>bash</code> <code>hello.sh 1 2 3 4</code>

<code>$* is 1 2 3 4</code>

<code>$0 is hello.sh</code>

<code>$1 is 1</code>

<code>$2 is 2</code>

<code>$3 is 3</code>

<code>$4 is 4</code>

python是一個介于shell和c/c++之間的語言,它的執行入口傳參有二者的特點。和shell一樣python也是沒有main函數的,但是python和c/c++類似有一個argv變量。python要傳參還需要一個sys子產品。

需要子產品:sys

參數個數:len(sys.argv)

腳本名: sys.argv[0]

參數1: sys.argv[1]

參數2: sys.argv[2]

………..

<code>#coding=utf-8</code>

<code>import</code> <code>sys</code>

<code>print</code> <code>"sys.argv[0] is "</code><code>, sys.argv[</code><code>0</code><code>]</code>

<code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>, </code><code>len</code><code>(sys.argv)):</code>

<code>    </code><code>print</code> <code>"sys.argv["</code><code>+</code><code>str</code><code>(i)</code><code>+</code><code>"] is "</code><code>, sys.argv[i]</code>

<code>python hello.py 2324 3 2 3 </code><code>"sads sdaf"</code>

<code>sys.argv[0] is  hello.py</code>

<code>sys.argv[1] is  2324</code>

<code>sys.argv[2] is  3</code>

<code>sys.argv[3] is  2</code>

<code>sys.argv[4] is  3</code>

<code>sys.argv[5] is  sads sdaf</code>