蒟蒻awa 2024-01-16 08:46 采纳率: 62.5%
浏览 6

C语言通过enum索引的玄学问题

现象描述

在C语言中,通过enum对数组进行索引,出现报错
但玄学的是,相同的代码在data.h中不报错,CV到lists.h中就报错Is not a variable了!
在lists.h中编写的报错代码,扔到data.h中又不报错了?!
报错信息:constant + (如下文的LS) + is not a variable
data.h中

img

img

lists.h中

img

img

源代码

在data.h中不报错但是lists.h中报错的代码:

// 各类文字
enum {
    FATAL_ERR,
    CMD_NOT_FOUND,
    VAR_NOT_FOUND,
    KEY_NOT_FOUND,
    FUNC_NOT_FOUND,
    WRONG_PASSWORD
};

const char *shellText[] = {
    [FATAL_ERR] = 
    "Shell fatal error!",
    [CMD_NOT_FOUND] = 
    "Command not found!",
    [VAR_NOT_FOUND] = 
    "Variable not found!",
    [KEY_NOT_FOUND] = 
    "Key not found!",
    [FUNC_NOT_FOUND] = 
    "Function not found!",
    [WRONG_PASSWORD] = 
    "Wrong password!"
};
// 所有命令的索引
enum {
    LS,
    CD
}JshCmdLists;

const char *cmdLists[] = {
    [LS] = 
    "ls",
    [CD] = 
    "cd"
};
  • 写回答

3条回答 默认 最新

  • 哎呀呀不会啊 2024-01-16 09:14
    关注

    虽然C语言标准允许使用匿名枚举,但某些编译器可能对此有限制。你可以尝试给枚举命名试试?

    enum ShellTextIndices {  
        FATAL_ERR,  
        CMD_NOT_FOUND,  
        ...  
    };  
      
    enum CmdListsIndices {  
        LS,  
        CD  
    };
    
    
    评论

报告相同问题?

问题事件

  • 修改了问题 1月16日
  • 创建了问题 1月16日