[英]The Naming Conventions of C: A struct and a function
在sigaction.h
头文件中探索处理系统信号请求的工具时,我注意到返回int
的结构和函数被命名为sigaction
。
即使它看起来在语义上是正确的,因为编译器应该能够在两个定义之间进行推导,为什么sigaction
的重复定义是有效的C语法?
在C中,struct标签与其他名称位于不同的名称空间中。 该结构称为struct sigaction
,而该函数只是sigaction
。
编译器能够分离结构标记(也是联合和枚举),因为它们分别遵循关键字struct
/ union
/ enum
(C11§6.2.3p1)。
然后,根据§6.7p3,声明在“同名空间”内必须是唯一的。
由于结构标记和函数标识符( 普通标识符 )不在同一名称空间中,因此“冲突”是可以的。
在使用方面,您无法做到:
typedef struct _test {
int a;
} test;
void test(void) {
}
编译器会通知您:
test.c:5:6: error: 'test' redeclared as different kind of symbol
void test(void) {
^
test.c:3:3: note: previous declaration of 'test' was here
} test;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.