我需要找到一个解决方案来创建一个数组,并在声明过程中指定数组的初始化。指定的动态数组初始化
以下代码在ARM11 C编译器下工作,但一如既往,它在MSVC编译器下不起作用。我试图在Win32下创建一个单元测试来测试嵌入式软件,然后再将它交付给客户。
代码看起来像如下:
/* 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 */
而且
/* 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,ex procs [ ] [3],它用{{proc3,1,2},{proc2,1,2},...}初始化。
有没有人有这个问题的答案?
AFAIKS这是一个有效的策略。只是你没有解释MSVC不喜欢什么。 – 2011-04-06 14:00:33
你好Jens。对不起,我忘了把它放进去。MSVC抱怨'['在宏=>“错误C2059:语法错误:'['”)的语法错误。当我删除'[P _ ## PROC + INST - 1] ='时,MSVC很高兴,但是我有指向错误位置的指针,因为p_queue_table中的条目没有按照正确的顺序排序进入表格的索引。 P_proc1是def。作为0,但是p_queue_table [0] [0]然后保存指向P_proc3的实例1的指针,并且p_queue_table [0] [1]保存指向P_proc3的实例2的指针。 – 2011-04-08 14:20:21