我注意到sigaction
被定义为一个结构和一个函数( http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html ):
int sigaction(int, const struct sigaction *restrict, struct sigaction *restrict);
而使用它的一个例子是:
struct sigaction sa; /* Set up handler */ sa.sa_flags = SA_SIGINFO|SA_RESTART; sa.sa_sigaction = timer_expiry; /* Setup signal watchdog */ if (sigaction(SIG_WDOG, &sa, NULL) == -1) { printf("ERROR: Failed to set wdog signal with %s", strerror(errno)); }
C有几个用于标识符的名字空间; 而功能标识符和结构标签标识符位于不同的名称空间中。
(C11,6.2.3标识符p1的名称空间)“如果某个特定标识符的多个声明在翻译单元中的任何一点都是可见的,那么语法上下文就可以区分使用不同实体的用法,因此,存在单独的名称空间对于各种类别的标识符,如下所示:
标签名称(通过标签声明和使用的语法来消除歧义);
关键字struct,union或enum的结构体,联合体和枚举的标签(通过下面的any32消除歧义);
结构或工会的成员; 每个结构或联合有一个单独的名字空间给它的成员(用通过。或 – >运算符访问成员的表达式的类型来消除歧义);
所有其他标识符,称为普通标识符(在普通的声明器中声明或作为枚举常量)
。