objective-c - Objective-C VS C 中的枚举

标签 objective-c c enums

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/

相关文章:

iphone - 使用分页旋转 UIScrollView 时出现问题

c - 如何为矩阵中的特定元素动态分配内存?

c++ - 我可以避免由特定类定义的限定名称吗?

ios - 在 Swift 中将结构重构为枚举

ios - 如果 View Controller 位于不同项目的库和 Storyboard中,则无法解决 'NSUnknownKeyException' 错误

ios - UIWebView 不会在 iOS 7 上出现 "scrollsToTop"?

iphone - 针对 iOS 3 和 iOS 4 启用了 locationServices

c - 二进制补码形式的 64 位负整数

代码在循环的第二次运行时停止

ios - swift : catch error case with parameters but with access to the error object