error: initializer element is not constant

发布时间:2023年12月26日

在 RK3308里加入了我自己的文件包后,不停的报错误,但是报的错误是我SDK包里面的内容,但是我没有更改过SDK包,正常来说,就算有错他也应该报我添加的包里面的错误。

board/board.c:37:28: error: initializer element is not constant
   37 | const int led_table_size = ARRAY_SIZE(led_table);

一般这种错误是由于在定义全局变量时,使用了不是常量表达式的初始化器导致的。这个错误出现在了定义 led_table_size 变量的那一行,而初始化器是 ARRAY_SIZE(led_table)。

解决这个错误的方法是将 led_table_size 定义为编译时常量
使用 #define 预处理指令:

#define LED_TABLE_SIZE ARRAY_SIZE(led_table)
const int led_table_size = LED_TABLE_SIZE;

通过 #define 定义了一个名为 LED_TABLE_SIZE 的宏,它被展开为 ARRAY_SIZE(led_table),然后将 led_table_size 定义为 LED_TABLE_SIZE 的值。这样做可以确保 led_table_size 被初始化为编译时常量。

使用 enum 枚举类型:

enum {
    LED_TABLE_SIZE = ARRAY_SIZE(led_table)
};
const int led_table_size = LED_TABLE_SIZE;

在这个例子中,使用 enum 枚举类型定义了一个名为 LED_TABLE_SIZE 的常量,它的值是 ARRAY_SIZE(led_table)。然后将 led_table_size 定义为 LED_TABLE_SIZE 的值。这样做也可以确保 led_table_size 被初始化为编译时常量。

文章来源:https://blog.csdn.net/weixin_45615278/article/details/135227071
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。