[英]Why is this cast to a struct pointer not a compile-time constant?
由于关于test_array大小不是编译时常量的错误,下面的C程序无法使用gcc进行编译。 为什么?
struct HWND__ { int unused; };
typedef struct HWND__ *HWND;
void test()
{
static int test_array[ (unsigned long long)((HWND)1) ];
}
产生的错误是:
test.c: In function ‘test’:
test.c:5:14: error: storage size of ‘test_array’ isn’t constant
static int test_array[ (unsigned long long)((HWND)1) ];
^
从C11标准,第6.6节:
整数常量表达式应具有整数类型,并且只能具有整数常量的操作数,枚举常量,字符常量,结果为整数常量的
sizeof
表达式,_Alignof
表达式以及作为强制转换的直接操作数的浮点常量。 整数常量表达式中的转换运算符只能将算术类型转换为整数类型,除非作为sizeof
或_Alignof
运算符的操作数的一部分。在许多上下文中需要整数常量表达式,例如结构的位字段成员的大小,枚举常量的值以及非可变长度数组的大小。
我认为这就是你的代码无效的原因。
我建议向hsc2hs开发人员提交错误报告,并在此期间手动修复这些病例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.