我在(const)(((unsigned long)(&var)) & (MACRO ))下面的代码中遇到了这个错误。
(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 };
好心帮忙。
k10s72fa1#
来自C11 6.7.9/4:具有静态或线程存储期限的对象的初始化器中的所有表达式都必须是常量表达式或字符串文字。从6.6/7开始:初始化器中的常量表达式允许有更大的自由度。这样的常量表达式应该是或计算为以下之一:
您的初始化器(const)(((unsigned long)(&var)) & (MACRO ))不匹配上述任何类型的常量表达式,即使&var部分是地址常量。
&var
1条答案
按热度按时间k10s72fa1#
来自C11 6.7.9/4:
具有静态或线程存储期限的对象的初始化器中的所有表达式都必须是常量表达式或字符串文字。
从6.6/7开始:
初始化器中的常量表达式允许有更大的自由度。这样的常量表达式应该是或计算为以下之一:
您的初始化器
(const)(((unsigned long)(&var)) & (MACRO ))
不匹配上述任何类型的常量表达式,即使&var
部分是地址常量。