簡體   English   中英

C中靜態結構的成員變量

[英]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意味着:

  • 程序中只有一個這個變量的實例。
  • 該變量應在程序執行的整個過程中有效。
  • 變量應在執行main()之前初始化。 如果程序員明確初始化變量,則應將其設置為此值。 否則應將其設置為零。
  • 變量(或靜態函數)只能從其內部聲明的范圍訪問。 如果在文件范圍(全局)中聲明,則只能在同一.c文件中訪問它。

在C ++中,還有一個額外的含義:

  • 無論分配了多少個類實例,靜態成員變量或成員函數都只能分配一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM