bpmn文件的标签为何都以bpmn2开头_C语言之两种作用域:函数的作用域与文件作用域...
作用域描述程序中可訪問標(biāo)識(shí)符的區(qū)域。一個(gè)C變量的作用域可以是塊作用域、函數(shù)作用域、函數(shù)原型作用域或文件作用域。
其中,塊是用一對(duì)花括號(hào)括起來的代碼區(qū)域。例如,整個(gè)函數(shù)體是一個(gè)塊,函數(shù)中的任意復(fù)合語句也是一個(gè)塊。定義在塊中的變量具有塊作用域(block scope),塊作用域變量的可見范圍是從定義處到包含該定義的塊的末尾。
另外,雖然函數(shù)的形式參數(shù)聲明在函數(shù)的左花括號(hào)之前,但是它們也具有塊作用域,屬于函數(shù)體這個(gè)塊。所以到目前為止,我們使用的局部變量(包括函數(shù)的形式參數(shù))都具有塊作用域。因此,下面代碼中的變量cleo和patrick都具有塊作用域:
double blocky(double cleo){????double patrick = 0.0;????...????return patrick;}聲明在內(nèi)層塊中的變量,其作用域僅局限于該聲明所在的塊:
double blocky(double cleo){????double patrick = 0.0;????int i;????for (i = 0; i < 10; i++)????{????????double q = cleo * i; // start of scope for q????????...????????patrick *= q;????}????????????????????????// end of scope for q????...?????return patrick;}在該例中,q的作用域僅限于內(nèi)層塊,只有內(nèi)層塊中的代碼才能訪問q。
以前,具有塊作用域的變量都必須聲明在塊的開頭。C99標(biāo)準(zhǔn)放寬了這一限制,允許在塊中的任意位置聲明變量。因此,對(duì)于for的循環(huán)頭,現(xiàn)在可以這樣寫:
for (int i = 0; i < 10; i++)????printf("A C99 feature: i = %d", i);為適應(yīng)這個(gè)新特性,C99把塊的概念擴(kuò)展到包括for循環(huán)、while循環(huán)、do-while循環(huán)和if語句所控制的代碼,即使這些代碼沒有用花括號(hào)括起來,也算是塊的一部分。所以,上面for循環(huán)中的變量i被視為for循環(huán)塊的一部分,它的作用域僅限于for循環(huán)。一旦程序離開for循環(huán),就不能再訪問i。
函數(shù)作用域(function-scope)僅用于goto語句的標(biāo)簽。這意味著即使一個(gè)標(biāo)簽首次出現(xiàn)在函數(shù)的內(nèi)層塊中,它的作用域也延伸至整個(gè)函數(shù)。如果在兩個(gè)塊中使用相同的標(biāo)簽會(huì)很混亂,標(biāo)簽的函數(shù)作用域防止了這樣的事情發(fā)生。
函數(shù)原型作用域(function prototype scope)用于函數(shù)原型中的形參名(變量名),如下所示:
int mighty(int mouse, double large);函數(shù)原型作用域的范圍是從形參定義處到原型聲明結(jié)束。這意味著,編譯器在處理函數(shù)原型中的形參時(shí)只關(guān)心它的類型,而形參名(如果有的話)通常無關(guān)緊要。
而且,即使有形參名,也不必與函數(shù)定義中的形參名相匹配。只有在變長數(shù)組中,形參名才有用:
void use_a_VLA(int n, int m, ar[n][m]);方括號(hào)中必須使用在函數(shù)原型中已聲明的名稱。變量的定義在函數(shù)的外面,具有文件作用域(file-scope)。具有文件作用域的變量,從它的定義處到該定義所在文件的末尾均可見??紤]下面的例子:
#include int units = 0;?????????/* a variable with file scope */void critic(void);int main(void){???...}void critic(void){???...}這里,變量units具有文件作用域,main()和critic()函數(shù)都可以使用它(更準(zhǔn)確地說,units具有外部鏈接文件作用域,稍后講解)。由于這樣的變量可用于多個(gè)函數(shù),所以文件作用域變量也稱為全局變量(global variable)。
翻譯單元和文件
我們常常會(huì)認(rèn)為多個(gè)文件在編譯器中可能以一個(gè)文件出現(xiàn)。例如,通常在源代碼(.c擴(kuò)展名)中包含一個(gè)或多個(gè)頭文件(.h擴(kuò)展名)。頭文件會(huì)依次包含其他頭文件,所以會(huì)包含多個(gè)單獨(dú)的物理文件。
但是,C預(yù)處理實(shí)際上是用包含的頭文件內(nèi)容替換#include指令。所以,編譯器把源代碼文件和所有的頭文件都看成是一個(gè)包含信息的單獨(dú)文件。這個(gè)文件被稱為翻譯單元(translation unit)。描述一個(gè)具有文件作用域的變量時(shí),它的實(shí)際可見范圍是整個(gè)翻譯單元。如果程序由多個(gè)源代碼文件組成,那么該程序也將由多個(gè)翻譯單元組成。每個(gè)翻譯單元均對(duì)應(yīng)一個(gè)源代碼文件和它所包含的文件。
總結(jié)
以上是生活随笔為你收集整理的bpmn文件的标签为何都以bpmn2开头_C语言之两种作用域:函数的作用域与文件作用域...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跃我GTR 3 Pro推送OTA3更新:
- 下一篇: 雷军冬至感言:小米智能电动汽车如何在20