C标准是否认为有一个或两个?结构超级用户输入';此标题中的类型?
您能给出三个C标准(最好是C99或C11)中的一个标准的章节和诗句吗?这表明下面的头文件中是否有一个或两个C标准是否认为有一个或两个?结构超级用户输入';此标题中的类型?,c,c99,C,C99,您能给出三个C标准(最好是C99或C11)中的一个标准的章节和诗句吗?这表明下面的头文件中是否有一个或两个struct-uperms\u条目类型 #ifndef UPERMS_CACHE_INCLUDE #define UPERMS_CACHE_INCLUDE typedef struct mutex MT_MUTEX; typedef struct uperms_cache { MT_MUTEX *cache_lock; int
struct-uperms\u条目
类型
#ifndef UPERMS_CACHE_INCLUDE
#define UPERMS_CACHE_INCLUDE
typedef struct mutex MT_MUTEX;
typedef struct uperms_cache
{
MT_MUTEX *cache_lock;
int processing;
struct uperms_entry *uperms_list; // No prior struct uperms_entry
} uperms_cache_t;
typedef struct uperms_entry // Does this define a different struct uperms_entry?
{
char username[32];
int perms;
struct uperms_entry *next;
} uperms_entry_t;
#endif /* UPERMS_CACHE_INCLUDE */
附加问题:
struct uperms\u条目
”,因此编号为1和2的问题没有实际意义。我很高兴在代码评审中发出嘶嘶声之前检查过
背景思维
本节是在主要问题解决很久之后添加的
以下是ISO/IEC 9899:2011中一些广泛但相关的引用: §6.2.7兼容型和复合型 ^1如果两种类型的类型相同,则它们具有兼容的类型。 确定两种类型是否兼容的其他规则包括 6.7.2中描述了类型说明符,6.7.3中描述了类型限定符, 在6.7.6中,对于声明者。55)此外,两种结构, 在单独的转换单元中声明的联合或枚举类型是 如果其标签和成员满足以下要求,则兼容: 如果一个用标签声明,另一个用标签声明 标签。如果两者都在各自翻译范围内的任何地方完成 单位,则以下附加要求适用:应 成员之间的一对一的通信,每对 使用兼容类型声明相应的成员;如果有一个成员 一个是使用对齐说明符声明的,另一个是 使用等效对齐说明符声明;如果 该对使用名称声明,另一对使用相同的名称声明 名称对于两个结构,应在 同样的顺序。对于两个结构或并集,对应的位字段 应具有相同的宽度。对于两个枚举,对应的成员 应具有相同的值 55)两种类型不必完全相同即可兼容 §6.7.2.1结构和联合规范 ^8结构声明列表在 结构或联合说明符在翻译中声明新类型 单位。结构声明列表是 组织或工会的成员。如果结构声明列表 不包含任何直接或通过匿名方式命名的成员 结构或匿名联合,行为未定义。类型是 直到紧接着终止列表的
}
之后才完成,并且
此后完成
§6.7.2.3标签
^4结构、联合或枚举类型的所有声明
相同的作用域和使用相同的标记声明相同的类型。无关的
是否存在标记或该类型的其他声明
相同的翻译单位,类型不完整(129)直到
在定义内容的列表的右大括号之后,
然后完成
^5结构、联合或枚举类型的两个声明
在不同的范围内或使用不同的标记声明不同的类型。每个
结构、联合或枚举类型的声明
include标记声明不同的类型
^6表单的类型说明符
struct-or-union identifier ;
struct-or-union identifier
struct-or-union identifier
struct或union标识符
opt{struct声明列表}
或
enum identifier
enum标识符
opt{enumerator list}
或
enum identifier
enum标识符
opt{enumerator list,}
声明结构、联合或枚举类型。该列表定义了
结构内容、联合内容或枚举内容。如果
提供了标识符,130)类型说明符还声明
要作为该类型的标记的标识符
^7表格的声明
struct-or-union identifier ;
struct-or-union identifier
struct-or-union identifier
指定结构或联合类型,并将标识符声明为
该类型的标记。131)
^8如果表单的类型说明符
struct-or-union identifier ;
struct-or-union identifier
struct-or-union identifier
除作为上述其中一种形式的一部分之外发生,并且没有其他形式
将标识符声明为标记是可见的,然后声明
结构或联合类型不完整,并将标识符声明为
该类型的标记。131)
^9如果表单的类型说明符
struct-or-union identifier ;
struct-or-union identifier
struct-or-union identifier
或
enum identifier
不是作为上述其中一种形式的一部分发生,以及声明
如果标识符的类型作为标记可见,则它将指定相同的类型
作为另一个声明,并且不重新声明标记
^12示例2说明如何使用标记的先前声明
指定一对相互引用的结构,声明
struct s1 { struct s2 *s2p; /* ... */ }; // D1
struct s2 { struct s1 *s1p; /* ... */ }; // D2
指定一对包含指向彼此的指针的结构。
但是,请注意,如果s2已经声明为
在封闭作用域时,声明D1将引用它,而不是标记
s2在D2中声明。为了消除这种上下文敏感性
声明
struct s2;
可在D1之前插入。这在内部声明了一个新的标记s2
范围然后,声明D2完成了新类型的规范
129)不完整类型只能在以下情况下使用:
不需要该类型的对象。例如,它是不需要的,
当typedef名称被声明为结构的说明符或
联合,或当指向或返回结构o的函数的指针