C語言中static關鍵字的幾種用法總結

2021-10-03 00:06:40 字數 2179 閱讀 7377

關於static關鍵字的使用,在大學期間並沒有多少接觸,後來才發現這貨是真好用!

下面是我對static關鍵字在c語言中使用的一些總結,僅供參考。吾非大神,若有錯漏之處,還請多多指點,大家一起交流學習。

區域性變數定義在函式體內部

普通區域性變數是在任意乙個函式內部定義的變數,這種變數不加static關鍵字,未賦初值時它的初值是不確定的,除非對它進行顯式賦值,並且每次執行這個函式,這個區域性變數都會被重新初始化。

靜態區域性變數也是在任意乙個函式內部定義的變數,需要加static關鍵字定義,未賦初值時的靜態區域性變數編譯器會預設初始化為0,當再次執行該函式時,變數的值保持執行結果不變,不會被重新初始化。

程式演示:

#include

void

test

(void

)void

test_static

(void

)int

main()

執行結果:

n =

0n++=1

static n =

0static n++=1

----

----

----

----

----

----

-n =

0n++=1

static n =

1static n++

=2

全域性變數定義在函式體的外部

普通全域性變數對整個工程可見,其他檔案若要直接使用可用extern關鍵字進行宣告。也就是說其他檔案不能再定義乙個與其相同名字的變數了(否則編譯器會認為它們是同乙個變數)。

靜態全域性變數僅對當前檔案可見, 其他檔案不可訪問該變數,因此其他檔案可以定義與之同名的變數,二者不會衝突。

因此,在程式中定義變數加上static關鍵字,可以有效的降低同一工程不同檔案之間的耦合,避免不同檔案同名變數的衝突。

非靜態函式可以在另乙個檔案中直接引用,甚至不必使用extern宣告

static在函式上的使用與全域性變數類似,在函式的返回值型別前加上static,就是靜態函式

靜態函式 特性如下:

/* file1.c */

#include

static

void

fun1

(void

)int

main

(void

)/* file2.c */

#include

static

void

fun2

(void

)

使用gcc file1.c file2.c編譯時,錯誤報告如下:

/tmp/cc2vmzgr.o:在函式『main』中:

static_fun.c:

(.text+

0x20

):對『fun2』未定義的引用

collect2: error: ld returned 1 exit status

修改檔案,去掉static修飾符,函式可在另一檔案中引用:

/* file1.c */

#include

void

fun1

(void

)int

main

(void

)/* file2.c */

#include

void

fun2

(void

)

執行結果如下:

hello from static fun1.

hello from static fun2.

C語言中的static關鍵字

c語言中的變數 1.自動變數。變數在執行到他的塊尾時就超出了作用域,它在堆疊上分配的記憶體會被釋放,以供另乙個函式使用。它們是在宣告時自動建立的,在程式退出宣告它的塊後自動刪除。2.全域性變數。可以在任意位置訪問,它的宣告方式和一般變數相同,但是它的位置非常重要,這個位置決定了變數是否為全域性變數。...

C語言中的static關鍵字

static關鍵字,意為靜態。靜態區域性變數void add test 靜態全域性變數 c程式一直由下列部分組成 1 正文段 cpu執行的機器指令部分 乙個程式只有乙個副本 唯讀,防止程式由於意外事故而修改自身指令 2 初始化資料段 資料段 在程式中所有賦了初值的全域性變數,存放在這裡。3 非初始化...

C語言中static關鍵字用法

static關鍵字在c語言中比較常用,使用恰當能夠大大提高程式的模組化特性,有利於擴充套件和維護。變數1.區域性變數 普通區域性變數是再熟悉不過的變數了,在任何乙個函式內部定義的變數 不加static修飾符 都屬於這個範疇。編譯器一般不對普通區域性變數進行初始化,也就是說它的值在初始時是不確定的,除...