C语言开发笔记(八)static
在C語言中,static有3個作用:
(1)在函數(shù)體,一個被聲明為靜態(tài)的變量在這一函數(shù)體內(nèi)被調(diào)用的過程中維持其值不變。
#include <stdio.h>void test(void) {static int i = 0;printf("%d\n", i++); }int main(void) {test();test();test();return 0; }如果不使用static修飾 int i,結(jié)果為。使用后結(jié)果為。
?
(2)在模塊內(nèi),一個被聲明為靜態(tài)的變量可以被模塊內(nèi)所有的函數(shù)訪問,但不能被模塊外其他函數(shù)訪問。它是一個本地的全局變量。
在test.c里面聲明一個全局變量
int a = 100;在main.c中也聲明一個全局變量
int a = 200;編譯器報錯
因為a是非靜態(tài)全局變量,作用域是整個源程序,而靜態(tài)全局變量的作用域限制在定義該變量的源文件內(nèi)有效。
test.c里面的變量修改為
static int a = 100;編譯通過。
?
(3)在模塊內(nèi),一個被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其他函數(shù)調(diào)用,這個函數(shù)被限制在聲明它的模塊的本地范圍內(nèi)使用。
比如static_test.h 的內(nèi)容為
#ifndef STATIC_TEST_H #define STATIC_TEST_Hstatic void static_func(void);void func(void);#endifstatic_test.c的內(nèi)容為
#include "static_test.h" #include <stdio.h>static void static_func(void) {printf("hello world\n"); }void func(void) {static_func(); }在main.c中去調(diào)用static_func(),編譯器會報錯。而static_test.c里調(diào)用static_func()是可以的。從而說明static修飾的函數(shù)只能在模塊static_test.c里面調(diào)用,不允許模塊外調(diào)用。
頭文件中static_func()不使用static修飾也可以編譯通過,但是依照代碼規(guī)范的要求,必須使用static修飾以增加閱讀性,頭文件使用static修飾表明了該函數(shù)不允許使用者調(diào)用。
總結(jié)
以上是生活随笔為你收集整理的C语言开发笔记(八)static的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 安阳治疗排卵障碍最好的医院推荐
- 下一篇: 矫正牙齿大约多少钱啊?
