理解LoadRunner中的局部變量和全局變量

以下內容均選自個人作品:《精通軟件性能測試與LoadRunner實戰》
 
C語言中,變量有效性的範圍稱變量的作用域。不僅對於形參變量,C語言中所有的量都有自己的作用域,按作用域範圍不同,可分爲局部變量和全局變量兩種變量類型。
LoadRunner中應用全局變量和局部變量的示例腳本如下:
 
4.9 LoadRunner 9.5 WebHTTP/HTML)協議腳本代碼截圖
上面代碼是在LoadRunner 9.5中編寫完成,請參見圖4.9左側,其包含一個文件名稱爲“globals.h”,您可以在該頭文件中定義全局變量,這裏我們定義了一個全局整型變量,它的名稱爲“icount”,初始值爲10,請參見globals.h頭文件內容:
#ifndef _GLOBALS_H
#define _GLOBALS_H

 

//--------------------------------------------------------------------
// Include Files
#include "lrun.h"
#include "web_api.h"
#include "lrw_custom_body.h"

 

//--------------------------------------------------------------------
// Global Variables

 

int icount=10;//全局變量

 

#endif // _GLOBALS_H

 

Action部分代碼如下:
int a=8,b=15;     /*a,b爲全局變量*/

 

int max(int a,int b) /*a,b爲局部變量*/
{
       return a>b?a:b ;
}

 

int incb()
{
       ++b;
       lr_output_message("incb()函數中的a=%d,b=%d",a,b);
}

 

Action()
{
       int a=10;//局部變量
       lr_output_message("a=%d,b=%d",a,b);
       incb();
       lr_output_message("a=%d,b=%d",a,b);
       lr_output_message("max(%d,%d)=%d",a,b,max(a,b));
       lr_output_message("globals.h中的全局變量icount=%d", icount);
       return 0;
}
Action部分,起始聲明瞭兩個整型全局變量,a並賦予初值8,b賦予初值15。接下來,聲明瞭兩個整型數比較函數max(),max()函數中,有兩個整型參數,abincb()函數,實現了對全局變量加一,而後,輸出全局變量a和b。Action()中,先聲明瞭局部變量a,並賦初值爲10,接下來,輸出局部變量a和全局變量b,又通過調用incb()函數對全局變量b進行加一,同事輸出a和b。這裏先給大家提一個問題,就是此時a的值應該輸出的是全局變量a還是局部變量a的值?請讀者朋友們認真考慮一下。後續還輸出maxab,這裏同樣存在上面的問題,最後輸出“globals.h”文件中的全局變量icount的值。
上面的腳本執行結果如下:
Running Vuser...
Starting iteration 1.
Starting action Action.
Action.c(17): a=10,b=15
Action.c(11): incb()函數中的a=8,b=16
Action.c(19): a=10,b=16
Action.c(20): max(10,16)=16
Action.c(21): globals.h中的全局變量icount=10
Ending action Action.
Ending iteration 1.
Ending Vuser...
根據執行結果,我們可以得出如下結論:
1.    全局變量是在函數外部定義的變量,它不屬於哪一個函數,它屬於一個源程序文件,其作用域是整個源程序。局部變量是在函數內作定義說明的,其作用域僅限於函數內。
2.    當局部變量和全局變量同名時,在局部變量的作用範圍內,全局變量不起作用,如在Action()函數部分,a的值爲10,而非全局變量8,這就回答了我們前面提的問題。當然,如果在該部分沒有聲明同名局部變量,則輸出的內容爲全局變量的值,如:變量b和“globals.h”中的全局變量icount的值,則輸出值,爲全局變量的值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章