加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:55:41 所属栏目:百科 来源:网络整理
导读:我有兴趣在C中创建一个结构(在其他POD类型中)包含一个数组,然后在堆栈上创建它的全局实例.数组长度在编译时是已知的,但对于每个结构实例将是不同的. struct的每个实例中的值都不会改变,因此应该设置为const. 目前我有以下代码: #ifdef __cplusplus extern "
我有兴趣在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的错误消息:

c:temptest_variable_length_arraysbob.c(15) : error C2059: syntax
error : ‘{‘

c:temptest_variable_length_arraysbob.c(15) : error C2059: syntax
error : ‘}’

c:temptest_variable_length_arraysbob.c(17) : error C2059: syntax
error : ‘}

提前感谢所有评论.

解决方法

您可以全局分配内部结构,然后在运行时分配到结构中,例如

int x[] = {1,1};
int y[] = {3,3,3};

int main()
{
    A_t str = {2,y};
}

我相信一些编译器也会让你将str的定义移动到全局范围,使其完全静态.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读