C常量结构,包含堆栈上不同长度的数组
我有兴趣在C中创建一个结构(在其他POD类型中)包含一个数组,然后在堆栈上创建它的全局实例.数组长度在编译时是已知的,但对于每个结构实例将是不同的. struct的每个实例中的值都不会改变,因此应该设置为const.
目前我有以下代码: #ifdef __cplusplus extern "C" { #endif #include "stdio.h" typedef struct A { int x; int y; int* z; } A_t; const A_t test[2] = { {1,1,(int[3]){1,1} },{2,2,(int[5]){2,2} } }; int main( void ) { printf( "test[0]: %d %d (%d,%d,%d)n",test[0].x,test[0].y,test[0].z[0],test[0].z[1],test[0].z[2] ); printf( "test[1]: %d %d (%d,test[1].x,test[1].y,test[1].z[0],test[1].z[1],test[1].z[2],test[1].z[3],test[1].z[4] ); printf( "nn" ); return; } #ifdef __cplusplus } #endif 这将是一个嵌入式系统,其中堆非常有限,所以我想避免malloc,除非我绝对必须.如果可能的话,我也想坚持使用C89,因为VS2008不支持C99(我认为). 这在GCC(通过MinGW 4.8.1)中工作正常,但在Visual Studio 2008中无法编译.有没有人有任何关于如何让它在两个编译器上工作的建议? 作为参考,这是来自VS2008的错误消息:
提前感谢所有评论. 解决方法
您可以全局分配内部结构,然后在运行时分配到结构中,例如
int x[] = {1,1}; int y[] = {3,3,3}; int main() { A_t str = {2,y}; } 我相信一些编译器也会让你将str的定义移动到全局范围,使其完全静态. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |