SA, 我所知道的是 Objective-C 是 C 的严格超集。
但是当我尝试了一个我曾经在 C 中使用的非常简单的枚举示例时,它在 Objective-C 中不起作用,
代码如下:
#import <Foundation/Foundation.h>
int main(void)
{
typedef enum
{
SUN, MON, TUES
}DAYS;
DAYS d = MON;
NSLog(@"%@", d);
return 0;
}
#include <stdio.h>
int main(void)
{
typedef enum
{
SUN, MON, TUES
}DAYS;
DAYS d = MON;
printf("%d\n", d);
return 0;
}
在 C 中,它工作得很好,但在 objective-c 中(我在 WIN 上使用 GNUstep)它在执行时崩溃(没有编译时错误)
谁能告诉我为什么?
最佳答案
%@
是对象说明符,枚举是 int(有符号或无符号)。要在 Objective-C 中打印枚举,您需要在 NSLog
中使用 %d
。
NSLog(@"%d", d);
您的原始示例崩溃是因为它期望 d
是一个对象,因此它会尝试将 description
消息发送到位于内存地址 1 的对象
(MON
的值)。
关于objective-c - Objective-C VS C 中的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132503/