[英]The member variable of a static struct in C
我有一個關於C語言中靜態結構的成員變量的問題。
有人說我們可以聲明一個static struct
,但是在C中,struct沒有像C ++中的類那樣的靜態成員,這是什么意思? 如果我聲明一個靜態結構,那么成員變量的狀態是什么? 有人可以幫我嗎?
請注意,靜態結構本身與結構的靜態成員不同。 雖然您可以聲明一個靜態結構變量:
static struct MyStruct s;
您無法使用靜態成員定義結構類型:
struct MyStruct {
static int i; // <- compiler error
};
原因在於,在C中,struct是一種類型 - 聲明一種類型,其成員變量始終是同一個實例(即靜態),因為該類型的多個實例簡直是無意義的。 在C ++中,結構體實際上是類(它們僅在成員的默認可見范圍內不同),而在C ++中,靜態關鍵字在這種情況下意味着其他東西。 它意味着一個類方法 - 但由於C沒有類和方法,因此這沒有意義,在C中無效。
獲得的經驗:C ++不是C.
我有一個關於C語言中靜態結構的成員變量的問題。
有人說我們可以聲明一個靜態結構
正確/法律:
// (global scope)
static struct t_struct {
int a;
} THE_STATIC_VARIABLE;
但是在C中,struct沒有像C ++中的類那樣的靜態成員
// (global scope)
struct t_ill_struct {
static int a; // << ill-formed in C, but valid in C++
};
這是什么意思? 如果我聲明一個靜態結構,那么成員變量的狀態是什么? 有人可以幫我嗎?
使用上面的示例,這意味着THE_STATIC_VARIABLE
將具有靜態存儲。 以下是等效的:
一種
// (global scope)
static struct t_struct {
int a;
} THE_STATIC_VARIABLE;
乙
// (global scope)
struct t_struct {
int a;
};
static struct t_struct THE_STATIC_VARIABLE;
也就是說,每個看到THE_STATIC_VARIABLE
定義的翻譯都會獲得自己的副本。
如果您想要與靜態C ++成員具有相同的效果,則必須在另一個范圍內聲明它 - 在struct的聲明之外:
// file.h
// (global scope)
struct t_struct {
int a;
};
extern struct t_struct THE_GLOBAL_VARIABLE;
// file.c
struct t_struct THE_GLOBAL_VARIABLE;
現在我們真的有一個,就像在C ++中一樣。
C中的static
意味着:
在C ++中,還有一個額外的含義:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.