c - 微 Controller C : initializer element is not constant

标签 c

<分区>

const char menu_000[] = " [Power Supply]";          // 0
const char menu_001[] = "  -800 Module1";           // 1
const char menu_002[] = "  -1800 Module1";          // 2
const char menu_003[] = "  -800 Module2";           // 3
const char menu_004[] = "  -1800 Module2";          // 4
const char menu_005[] = "  -800 Module3";           // 5
const char menu_006[] = "  -1800 Module3";          // 6
const char menu_007[] = "  -800 Module4";           // 7
const char menu_008[] = "  -1800 Module4";          // 8


// Array of entries
MenuEntry menu[] =
{
    {menu_000, 9,  0,  0,  0,  0},      // 0
    {menu_001, 9,  1,  2,  1,   readmodule(1)},
    {menu_002, 9,  1,  3,  2,   readmodule(2)},
    {menu_003, 9,  2,  4,  3,   readmodule(3)},
    {menu_004, 9,  3,  5,  4,   readmodule(4)},
    {menu_005, 9,  4,  6,  5,   readmodule(5)},
    {menu_006, 9,  5,  7,  6,   readmodule(6)},
    {menu_007, 9,  6,  8,  7,   readmodule(7)},
    {menu_008, 9,  7,  8,  8,   readmodule(8)}
    };

我正在尝试构建这种结构,即以这种方式定义:

    typedef const struct MenuStructure
{   const char *text;
    unsigned char num_menupoints;
    unsigned char up;
    unsigned char down;
    unsigned char enter;
    void ( *fp )( void );
    // unsigned char value;
}MenuEntry;

但我一直收到这个错误:“初始化器元素不是常量” 我该怎么办?

最佳答案

void ( *fp )( void ); 是一个指向函数的指针,你必须分配一个不带参数的函数,这将编译:

#include <stdio.h>

void readmodule(void)
{
    /* do something */
}

const char menu_000[] = " [Power Supply]";          // 0
const char menu_001[] = "  -800 Module1";           // 1
const char menu_002[] = "  -1800 Module1";          // 2
const char menu_003[] = "  -800 Module2";           // 3
const char menu_004[] = "  -1800 Module2";          // 4
const char menu_005[] = "  -800 Module3";           // 5
const char menu_006[] = "  -1800 Module3";          // 6
const char menu_007[] = "  -800 Module4";           // 7
const char menu_008[] = "  -1800 Module4";          // 8

typedef const struct MenuStructure
{   const char *text;
    unsigned char num_menupoints;
    unsigned char up;
    unsigned char down;
    unsigned char enter;
    void ( *fp )( void );
} MenuEntry;

// Array of entries
MenuEntry menu[] =
{
    {menu_000, 9,  0,  0,  0,   0}, /* better to use NULL instead of 0 for fp */
    {menu_001, 9,  1,  2,  1,   readmodule},
    {menu_002, 9,  1,  3,  2,   readmodule},
    {menu_003, 9,  2,  4,  3,   readmodule},
    {menu_004, 9,  3,  5,  4,   readmodule},
    {menu_005, 9,  4,  6,  5,   readmodule},
    {menu_006, 9,  5,  7,  6,   readmodule},
    {menu_007, 9,  6,  8,  7,   readmodule},
    {menu_008, 9,  7,  8,  8,   readmodule}
};

int main(void)
{
    return 0;
}

关于c - 微 Controller C : initializer element is not constant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959834/

相关文章:

c - 将字符串中的 IP 传递给 htonl

c++ - 从 JFIF/EXIF (JPEG) header 获取实际图像分辨率?

c++ - 创建链接数未知的结构节点

c - 如何确保具有异步 IO 的管道上的所有输出在关闭前完成

c - C90 中的无符号整数加法和未定义行为

c - 在C中,我应该如何读取文本文件并打印所有字符串

c - 卖出股票的最大利润,使得买入和卖出之间最多有 "L"天的差异

c - 对齐有错误

c - 如何将字符串转换为 int32 到十六进制并存储到缓冲区

c++ - 是否存在适用于 Windows Embedded Compact 的软件 CPU 分析器?