簡體   English   中英

使用靜態數組初始化常量struct對象

[英]use of static array to initialize constant struct object

我最近遇到了以下代碼:

    static const struct gaih gaih[] = {    
#if defined __UCLIBC_HAS_IPV6__    
    { PF_INET6, gaih_inet },    
#endif    
    { PF_INET, gaih_inet },    
#if 0   
    { PF_LOCAL, gaih_local },    
#endif    
    { PF_UNSPEC, NULL }    
};    



     struct gaih {    
            int family;    
            int (*gaih)(const char *name, const struct gaih_service *service,    
                    const struct addrinfo *req, struct addrinfo **pai);    
        };    


int func{    

const struct gaih *g = gaih;    

    }    

我了解常量和靜態的含義。 但是我能夠以這種粗略的方式解釋常量對象靜態初始化背后的邏輯。 請說明這樣做的原因或用途

file.c似乎是C文件。 在C中使用static具有兩個含義:

  1. 不在堆棧上(例如,對於函數內部的變量,該變量應在函數的多次調用中保持其值)
  2. 未從此模塊導出(對於不應作為符號提供給鏈接器的變量)

在這種情況下,它似乎是第二個。 變量gaih不應static導出(對於鏈接程序可見),並且不得更改const 沒有什么是粗糙的。

但是,為了進一步闡明細節,將需要完整的有效代碼。 它似乎只是一個條目而對結構數組進行的恆定和靜態初始化。 變量g只是指向該單個條目的指針。

這個例子有一定的相似性與struct gaih_addrtuplenss.h是用於主機名和IP地址的鏈接列表gethostbyname

全局變量gaih被定義為static ,這意味着它僅在當前文件中可見,而const則被定義為一旦初始化就無法修改。

局部變量g也定義為const ,這意味着它無法更改。 它是使用全局gaih數組的地址初始化的,因此在這種情況下,可以將g視為數組。

g也可以傳遞給另一個函數,可能在另一個文件中。 這允許在當前文件之外讀取gaih的內容,這是嘗試直接引用gaih所不允許的。

暫無
暫無

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

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