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