C语言extern与static修饰变量
extern和static在C語言里面的作用這里就不做過多的闡述了,下面直接通過一個小程序來看一看他們修飾的變量的特性。
#include <stdio.h>int count = 3;int main() {int i = 0, count = 2, sum = 0;for (i = 0; i < count; i += 2, count++){static int count = 4;count++;if (i % 2 == 0){extern int count;count++;sum += count;}sum += count;}printf("%d %d\n", sum, count);system("pause");return 0; }看到結果有沒有很驚訝,下面就來通過調試一步步分析出這個結果:
那么可以得出:此時count是main函數中for循環語句之前定義的局部變量
執行完40行的語句后,count變為4,說明此時的count為static修飾的count
這兒應該是vs2013的一個bug,因為extern修飾的變量必須是具有外部鏈接屬性的,也就是上面定義的全局的count,那么此時count的值應該為3(黃色箭頭在第45行,說明第44行執行結束,要開始執行第45行了),為什么我這么說呢
可以看到即使我執行了count++,count的值也沒有變化
而執行完sum+=count,sum的值是變成了4,而不是5(此時是執行到了48行,也就是要開始執行第48行,所以不要誤認為是把第二次sum+=count都已經執行了),此時的count值變成5也是正確的了,因為此時的count是static修飾的count(if語句里的extern修飾的count是一個局部變量,他的作用域是if語句),為什么這么確定,看一看接下來sum值得變化就知道了
因為變量具有局部優先性,所以這兒的count是static修飾的count,而不是全局的count或是for循環之上的count
接下來就很簡單了,i=2,此時的count=3,那么循環還是可以進去,再執行一次
此時i=4,count=4,二者值相等,所以不再進入循環,順序向下執行
所以sum最終為20,那么輸出sum為20,printf輸出語句輸出的count為4,是因為變量具有局部優先性,所以這兒的count是for循環上面的局部變量count,值為4
總結
以上是生活随笔為你收集整理的C语言extern与static修饰变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: as mysql with 嵌套_MyS
- 下一篇: postgresql定义访问ip与用户_