static關鍵字在C和C++中的用法稍有區(qū)別,主要是C++擴展了static關鍵字的作用
C 用法
1.修飾函數成員變量:例
//test.h
void test_static_var();

//test.c
void test_static_var()


{
static int var=0;//!不初始化默認為0
var++;
printf("static int var : %d \n", var);
}

//main.c
int main()


{
for (int i=0; i<10; i++)

{
test_static_var();
}
getchar();
return 0;
}
2.在文件級別(即:在函數體外)修飾 變量或者函數,則表示該變量只在該文件中可見及可用
//test.h
void test_static_funtion_one();
void test_static_fuction_two();

//test.c
void test_static_funtion_one()


{
printf("This is a normal function. \n");
}
static
void test_static_fuction_two()


{
printf("This is a function modified by static. \n");
}

//main.c

int main()


{
test_static_funtion_one();
test_static_fuction_two();
getchar();
return 0;
}
這樣就會報錯:LNK2001: 無法解析的外部符號 "void __cdecl test_static_fuction_two(void)" (?test_static_fuction_two@@YAXXZ)
原因就是test_static_fuction_two()被修飾為static ,如果main中不調用的話,編譯可以通過(VS08),否則便以失敗
修飾為static后,它只能在test.c中使用。
C++中包含了前兩種方法,又擴展了下面兩種方法:
3.修飾class 數據成員,稱為 靜態(tài)數據成員
4.修飾class 函數成員,稱之為 靜態(tài)成員函數
//test.h
class TestA

{
public:
static int s_count;
static int getCount();
public:
int m_value;
};

//test.c
int TestA::s_count=0;
int TestA::getCount()

{
//m_value+=m_value; 靜態(tài)函數中只能操作靜態(tài)數據成員
return s_count;
}
因為靜態(tài)成員函數沒有傳入隱式的this指針,所以,它不能使用. 、->操作符 ;不能是virtual 的,不能和非靜態(tài)的同名
1.修飾函數成員變量:例



























2.在文件級別(即:在函數體外)修飾 變量或者函數,則表示該變量只在該文件中可見及可用































原因就是test_static_fuction_two()被修飾為static ,如果main中不調用的話,編譯可以通過(VS08),否則便以失敗
修飾為static后,它只能在test.c中使用。
C++中包含了前兩種方法,又擴展了下面兩種方法:
3.修飾class 數據成員,稱為 靜態(tài)數據成員
4.修飾class 函數成員,稱之為 靜態(tài)成員函數





















