gpt4 book ai didi

c - 初始化元素不是常量?

转载 作者:行者123 更新时间:2023-12-01 23:43:40 25 4
gpt4 key购买 nike

我对 C 比较了解,只学习它的一部分来发布 Pebble C/PebbleKitJS 应用程序来跟踪公交车。到目前为止,我已经在节点服务器上处理了数据,我正准备让 JS 文件处理数据。然而,我的一个问题在于 C 代码。

此代码处理存储在从 JS 发送的 Key Dictionary 中的数据,并将其分配给变量以供下面使用。通过使用 #define var 9,我可以成功地将 .high 值设置为 9。但是通过一个 int var,它失败并抛出错误:initializer element not constant?? .

这个错误是什么意思,如果我不定义它,static 和 constant 之间到底有什么区别。显然静态变量不返回任何东西?一些帮助将不胜感激。

更新:问题仍未解决。除了初始值设定项之外,还会出现以下新错误消息。 错误:('s_data_points[0].high' 接近初始化)

   int key0_buffer; 


void process_tuple(Tuple *t)
{
//Get key
int key = t->key;

//Get integer value, if present
int value = t->value->int32;

//Get string value, if present
char string_value[32];
strcpy(string_value, t->value->cstring);

//Decide what to do
switch(key) {
case key_0:
//Location received
key0_buffer = value;
break;
}



}

static WeatherAppDataPoint s_data_points[] = {

{
.city = "San Diego",
.description = "surfboard :)",
.icon = WEATHER_APP_ICON_GENERIC_WEATHER,
.current = 110,
.high = key0_buffer,
.low = 9,
},
};

最佳答案

试试这个:

enum { key0_buffer = 9 };
  • C 在初始化全局变量时不提供运行时计算。 (这个概念确实作为称为“动态初始化”的 C++ 功能存在。)

    执行模型是将全局变量的所有字节存储在ROM中,然后将任何可修改的变量与单个memcpy一起复制到RAM中。将一个全局分配给另一个会更复杂。

  • #define 允许您替换文本 9,这是一个常量表达式。

    许多人不赞成使用文本替换来避免将变量视为原始的、不必要的低级和可能低效的变量。不过在这种情况下,结果应该是相同的。

  • 在 C 中,enum 常量的类型为 int,因此它们是合适的替代品。不过,对于其他类型,你就不走运了。

关于c - 初始化元素不是常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30158010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com