我最近遇到了以下代码:
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;
}
我理解常量和静态的含义。 但我能够以如此原始的方式破译常量对象静态初始化背后的逻辑。 请澄清这样做的原因或用法
答案 0 :(得分:1)
file.c
似乎是一个C文件。在C中使用static
有两个含义:
在这种情况下,它似乎是第二个。变量gaih
不得导出(链接器可见)static
,不得更改const
。没有什么粗糙的。
但为了澄清更多细节,将需要完整的有效代码。它似乎是一个只有一个条目的结构数组的常量和静态初始化。变量g
只是指向此单个条目的指针。
此示例与struct gaih_addrtuple
中的nss.h
有一些相似之处,gethostbyname
是用于var tmp = Sizzle('h1');
tmp[0].innerHTML = "test";
的主机名和IP地址的链接列表。
答案 1 :(得分:1)
全局变量gaih
定义为static
,这意味着它仅在当前文件中可见,const
,这意味着一旦初始化它就无法修改。 / p>
局部变量g
也定义为const
,这意味着它无法更改。它使用全局gaih
数组的地址进行初始化,因此在此上下文中可以将g
视为数组。
g
也可以传递给另一个函数,可能在另一个文件中。这允许在当前文件之外读取gaih
的内容,而尝试直接引用gaih
是不允许的。