目前我有以下代码:
#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( "\n\n" ); return;}#ifdef __cplusplus }#endif
这将是一个嵌入式系统,其中堆非常有限,所以我想避免malloc,除非我绝对必须.如果可能的话,我也想坚持使用C89,因为VS2008不支持C99(我认为).
这在GCC(通过MinGW 4.8.1)中工作正常,但在Visual Studio 2008中无法编译.有没有人有任何关于如何让它在两个编译器上工作的建议?
作为参考,这是来自VS2008的错误消息:
c:\temp\test_variable_length_arrays\bob.c(15) : error C2059: Syntax
error : ‘{‘c:\temp\test_variable_length_arrays\bob.c(15) : error C2059: Syntax
error : ‘}’c:\temp\test_variable_length_arrays\bob.c(17) : error C2059: Syntax
error : ‘}
提前感谢所有评论.
解决方法 您可以全局分配内部结构,然后在运行时分配到结构中,例如int x[] = {1,1};int y[] = {3,3,3};int main(){ A_t str = {2,y};}
我相信一些编译器也会让你将str的定义移动到全局范围,使其完全静态.
总结以上是内存溢出为你收集整理的C常量结构,包含堆栈上不同长度的数组全部内容,希望文章能够帮你解决C常量结构,包含堆栈上不同长度的数组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)