繁体   English   中英

为什么这个转换为结构指针而不是编译时常量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM