在Objective-C VS C中的枚举

Muh*_*edy 4 c enums objective-c

SA,我所知道的是Objective-C是C的严格超集.

但是当我尝试了一个非常简单的枚举示例时,我曾经在C中使用它,它在目标C中不起作用,

这是代码:

#import <Foundation/Foundation.h>

int main(void)
{
    typedef enum 
    {
        SUN, MON, TUES
    }DAYS;

    DAYS d = MON;

    NSLog(@"%@", d);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>

int main(void)
{
    typedef enum 
    {
        SUN, MON, TUES
    }DAYS;

    DAYS d = MON;

    printf("%d\n", d);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在C中,它完美地工作,但是在objective-c(我在WIN上使用GNUstep)它在执行时崩溃(没有编译时错误)

谁能告诉我为什么?

Joe*_*Joe 17

%@是一个对象说明符,枚举是一个int(有符号或无符号).要在Objective-C中打印枚举,您需要%d在您的NSLog.

NSLog(@"%d", d);
Run Code Online (Sandbox Code Playgroud)

您的原始示例崩溃,因为它期望d是一个对象,因此它会尝试将description消息发送到驻留在内存地址1(值MON)的对象.