为C++开发人员声明和使用 C 中的枚举和结构
declaring and using enums and structs with C for C++ developers
我想知道什么时候应该将typedef
与 C 中的结构/枚举一起使用。我相信同样的原则也适用于目标-C
假设我有这样的东西
@interface foo : UIViewController
...
enum PlayState {Start , Stop , Pause};
@end
然后在实现文件中我有这个
@implementation foo
-(void) SomeMethod : (PlayState) val /// <----Eror : How do I set PlayState as a parameter
{
}
@end
C 的乐趣...
在(Objective-)C中,由enum
(或struct
)定义引入的名称不是独立的,要使用它,您必须在它前面加上enum
。所以你的例子可以写:
enum PlayState {Start , Stop , Pause};
- (void) SomeMethod:(enum PlayState)val
C 还允许使用 typedef
为任何类型的类型提供速记,因此您可以添加到上述内容中:
typedef enum PlayState PlayState;
请注意,两个PlayState
是不同的 - 一个是enum
标识符,另一个是类型名称 - C 总是可以从上下文中分辨出你的意思。
现在你可以只使用PlayState
:
- (void) SomeOtherMethod:(PlayState)val
(并且enum PlayState
仍然有效)。
然后,C 允许您将enum
和typedef
合二为一,从而得到:
typedef enum PlayState {Start , Stop , Pause} PlayState;
最后,由于您现在PlayState
作为类型名称,您可能永远不会使用enum PlayState
因此 C 允许您删除标记:
typedef enum {Start , Stop , Pause} PlayState;
但enum PlayState
现在不再有效。
以上所有内容也适用于struct
。
更改枚举声明:
typedef enum : NSUInteger {
Start,
Stop,
Pause,
} PlayState;
相关文章:
- 访问在 C++ 结构中声明的枚举变量
- 带有枚举方向/类型的气泡排序结构数组
- 从 cin 获取 c++ 中结构中多个枚举的输入
- 在结构中使用枚举的值
- 创建结构作为枚举类成员
- 在 C++ 中使用枚举而不是结构进行标记调度
- 为什么要在结构中放置枚举,然后使用 typedef 名称?
- std::映射键作为模板化结构与枚举成员
- 与常规枚举相比,c++ 枚举结构的大小更大吗?
- 枚举范围无法通过 C++ 中的类中的结构访问
- 如何编写一个错误结构,该结构可以包含不同的强键枚举作为错误代码
- 用枚举场和STL容器解析结构,并使用增强精神/融合轻松
- 在容器内过度对齐的结构和枚举之间的C 差异
- 当枚举器列表项的标识符已是结构的成员时,如何使用枚举器列表项
- 从匿名结构访问枚举条目
- 模板结构结合枚举
- 模板结构的多个声明,用于获取枚举,描述模板类型
- 如何定义别名以通过结构访问枚举类成员
- 在c++中创建字符串的枚举/结构体
- 无法访问常量静态标准::映射枚举结构