一個例子說明C語言中代碼塊作用域、函數作用域、函數原型作用域、文件作用域的區別

直接上代碼,編譯環境VIsual C++

/****************************************************
        頭文件聲明
----------------------------------------------------*/
#include<stdio.h>

/****************************************************
        全局變量聲明
----------------------------------------------------*/
         int q;//q具有文件作用域,此處爲文件作用域開始
/****************************************************
        函數聲明
----------------------------------------------------*/
//變量m具有函數原型作用域,從變量定義處一直到變量聲明的末尾,也就是侷限在小括號()內,也可以不用變量名q,只用int*告訴編譯器參數類型,
//如果加名字的話,也可以用int*m等別的名字,可以不與函數定義中的名字p相同
void fun(int*m);

/****************************************************
        主函數
----------------------------------------------------*/


int main(void)
{
    //函數作用域開始,本質屬於代碼塊作用域
    int i=10;
 q=20;
 printf("Before change ,i=%d\n",i);
 fun(&i);
    printf("After change ,i=%d\n",i);
 printf("Global Variable q=%d\n",q);
    for(int j=0;j<5;j++)//複合語句作用域開始,本質屬於代碼塊作用域
 {
  int m=0;
  printf("j=%d\n",j);
 }//複合語句作用域結束
 return 0;
    //函數作用域結束
}
void fun(int*p)
{//形參變量p函數作用域開始,本質屬於代碼塊作用域
 *p=30;
 //形參變量p函數作用域結束
}
//全局變量q的文件作用域結束

 

編譯後結果如下

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章