初始化器元素不是常量C中将变量的地址分配给常量数组时出错

s2j5cfk0  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(97)

我在(const)(((unsigned long)(&var)) & (MACRO ))下面的代码中遇到了这个错误。

unsigned char var;
#define MACRO (0x00FF0000UL)

const unsigned long arr[4] = 
{
1,
2,
3,
(const)(((unsigned long)(&var)) & (MACRO )) //I want address of var and with MACRO
    
};

好心帮忙。

k10s72fa

k10s72fa1#

来自C11 6.7.9/4:
具有静态或线程存储期限的对象的初始化器中的所有表达式都必须是常量表达式或字符串文字。
从6.6/7开始:
初始化器中的常量表达式允许有更大的自由度。这样的常量表达式应该是或计算为以下之一:

  • 算术常数表达式,
  • 空指针常数,
  • 地址常数,或
  • 完整对象类型的地址常量加上或减去整数常量表达式。

您的初始化器(const)(((unsigned long)(&var)) & (MACRO ))不匹配上述任何类型的常量表达式,即使&var部分是地址常量。

相关问题