首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >指定的动态数组初始化

指定的动态数组初始化
EN

Stack Overflow用户
提问于 2011-04-06 09:04:14
回答 1查看 549关注 0票数 0

我需要找到一个解决方案来创建一个数组,并在声明期间对该数组进行指定的初始化。

下面的代码可以在ARM11 C编译器下运行,但像往常一样,它不能在MSVC编译器下运行。我正在尝试在Win32下创建一个单元测试,以便在将嵌入式软件交付给客户之前对其进行测试。

代码如下所示:

代码语言:javascript
运行
AI代码解释
复制
/* In some header file: */
...
/* Module1 */
#define P_proc1     0

/* Module2 */
#define P_proc2     ( P_proc1 + 1 )
#define P_proc3     ( P_proc2 + 1 )
#define P_proc4     ( P_proc3 + 1 )

/* Module3 */
#define P_proc5     ( P_proc4 + 1 )
#define P_proc6     ( P_proc5 + 1 )
#define P_proc7     ( P_proc6 + 1 )
#define Q_proc2_2nd_inst ( P_proc7 + 1 )
#define Q_proc3_2nd_inst ( Q_proc2_2nd_inst + 1 )
#define Q_proc5_2nd_inst ( Q_proc3_2nd_inst + 1 )
#define P_Last      ( Q_proc5_2nd_inst + 1 )
...
/* End of some header file */

代码语言:javascript
运行
AI代码解释
复制
/* The source file */
#include "some header file"
...
/* MACRO declarations */
/* For the following macro: PROC = base process name,
                            INSTANCE = base number of instance
                            GROUP = extended num of instances for this instance*/
#define PQ_ENTRY(PROC, INSTANCE, GROUP ) \
    [P_##PROC + INST - 1] = { queue_table + P_##PROC + INSTANCE - 1, \
                              queue_table + ( GROUP == 1 ? \
                              P_##PROC : \
                              Q_##PROC##_2nd_inst ) \
                              + INST - 1 }

/* GLOBAL VARIABLE declarations */
/* queue definitions for tasks */
t_queue queue_table[P_last + 1];

t_queue *const p_queue_table[][2] =  
{  
    PQ_ENTRY( proc3,    1, 2 ),  
    PQ_ENTRY( proc2,    1, 2 ),  
    PQ_ENTRY( proc7,    1, 1 ),  
    PQ_ENTRY( proc5,    1, 2 ),  
    PQ_ENTRY( proc6,    1, 1 ),  
    PQ_ENTRY( proc1,    1, 1 ),  
    PQ_ENTRY( proc4,    1, 1 )  
};  
...  
/* End of source file */  

P_proc*的定义也是表(数组) queue_table的索引。在本例中,进程(基)名称很简单,只有几个进程,但对于真正的代码,有更多的进程,并且(基)名称可以是任何东西。

p_queue_table的思想是有一个表,该表将为进程的不同实例保存指向queue_table的指针,并且该表具有作为索引的进程名称def.,P_procX。

不可能依赖于p_queue_table中条目的顺序与定义的P_XXX流程名称的顺序完全相同。如果是,那么我就不需要对表进行指定的初始化。一种解决方案是只声明p_queue_table数组,然后在函数中初始化它,但这并不是我们想要的。

在创建表格时,必须能够扩展/创建宏来进行表格的初始化,即使需要创建另一个表格,以便以后可以排序并用于初始化p_queue_table,例如使用{{proc3,1,2},{proc2,1,2},...}初始化的procs。

有谁有这个问题的答案吗?

EN

回答 1

Stack Overflow用户

发布于 2011-04-08 16:19:11

您正在使用指定的初始值设定项功能

代码语言:javascript
运行
AI代码解释
复制
double A[10] = { [1] = 32.0, [5] = 43.0 };

用于数组元素。这个特性是由C99引入的,它是12年来一直有效的C语言标准。AFAIK MSVC不支持C99,只支持C89。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5563891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档