繁体   English   中英

C的命名约定:结构和函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM