C常量结构,包含堆栈上不同长度的数组

C常量结构,包含堆栈上不同长度的数组,第1张

概述我有兴趣在C中创建一个结构(在其他POD类型中)包含一个数组,然后在堆栈上创建它的全局实例.数组长度在编译时是已知的,但对于每个结构实例将是不同的. struct的每个实例中的值都不会改变,因此应该设置为const. 目前我有以下代码: #ifdef __cplusplus extern "C" {#endif#include "stdio.h"typedef struct A 我有兴趣在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( "\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常量结构,包含堆栈上不同长度的数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216441.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存