[英]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
具有兩個含義:
在這種情況下,它似乎是第二個。 變量gaih
不應static
導出(對於鏈接程序可見),並且不得更改const
。 沒有什么是粗糙的。
但是,為了進一步闡明細節,將需要完整的有效代碼。 它似乎只是一個條目而對結構數組進行的恆定和靜態初始化。 變量g
只是指向該單個條目的指針。
這個例子有一定的相似性與struct gaih_addrtuple
在nss.h
是用於主機名和IP地址的鏈接列表gethostbyname
。
全局變量gaih
被定義為static
,這意味着它僅在當前文件中可見,而const
則被定義為一旦初始化就無法修改。
局部變量g
也定義為const
,這意味着它無法更改。 它是使用全局gaih
數組的地址初始化的,因此在這種情況下,可以將g
視為數組。
g
也可以傳遞給另一個函數,可能在另一個文件中。 這允許在當前文件之外讀取gaih
的內容,這是嘗試直接引用gaih
所不允許的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.