由于关于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) ];
^
答案 0 :(得分:3)
根据C11标准,第6.6节:
整数常量表达式应具有整数类型,并且只能具有整数常量的操作数,枚举常量,字符常量,结果为整数常量的
sizeof
表达式{{1}表达式和浮动常量,它们是强制转换的直接操作数。整数常量表达式中的转换运算符只能将算术类型转换为整数类型,除非作为_Alignof
或sizeof
运算符的操作数的一部分。在许多上下文中都需要整型常量表达式,例如结构的位字段成员的大小,枚举常量的值以及非可变长度数组的大小。
我认为这就是您的代码无效的原因。
我建议向hsc2hs开发人员提交错误报告,并在此期间手动修复这些病例。