在C語言中,static
關鍵字有著特殊的作用
static
關鍵字聲明一個變量時,該變量的作用域僅限于該函數。這意味著在其他函數中無法訪問這個變量。#include<stdio.h>
void function1() {
static int count = 0;
count++;
printf("Function 1 called %d times\n", count);
}
void function2() {
// 無法訪問function1中的count變量
}
int main() {
function1();
function1();
return 0;
}
static
關鍵字用于局部變量時,它的值在函數調用之間保持不變。這是因為static
局部變量存儲在靜態存儲區,而不是棧上。#include<stdio.h>
void function() {
static int count = 0;
count++;
printf("Count: %d\n", count);
}
int main() {
function(); // 輸出 "Count: 1"
function(); // 輸出 "Count: 2"
return 0;
}
static
關鍵字用于函數聲明時,該函數只能在聲明它的源文件中被訪問。這意味著在其他源文件中無法訪問這個函數。// file1.c
#include<stdio.h>
static void function() {
printf("This is a static function.\n");
}
void public_function() {
function();
}
// file2.c
#include<stdio.h>
extern void public_function();
int main() {
public_function(); // 正確調用,因為public_function()在file1.c中可見
function(); // 錯誤:'function' was not declared in this scope,因為function()在file1.c中是靜態的,無法在file2.c中訪問
return 0;
}
注意:在C++中,static
關鍵字的用法與C語言類似,但在類成員函數和類成員變量中有一些額外的用途。在C++中,static
成員函數和static
成員變量屬于類本身,而不是類的實例。這意味著它們可以在沒有創建類實例的情況下訪問。