Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何定义变量列表:variables1、variables2、variablesN_C_Variables - Fatal编程技术网

C 如何定义变量列表:variables1、variables2、variablesN

C 如何定义变量列表:variables1、variables2、variablesN,c,variables,C,Variables,我想做以下工作: #define ConfigureCAN(index,value) CAN.MBOX##index=value for (i=0;i<15;i++) ConfigureCAN (i,0); 谢谢 编辑:这项工作或更好的是索引的stuct正确吗? #定义ConfigureCAN(index,value){struct MBOX*Mailbox;Mailbox=&can.MBOX0+(index*sizeof(struct MBOX));MBOX=value;}不,不能

我想做以下工作:

#define ConfigureCAN(index,value) CAN.MBOX##index=value
 for (i=0;i<15;i++) ConfigureCAN (i,0);

谢谢

编辑:这项工作或更好的是索引的stuct正确吗?
#定义ConfigureCAN(index,value){struct MBOX*Mailbox;Mailbox=&can.MBOX0+(index*sizeof(struct MBOX));MBOX=value;}

不,不能使用
for
循环索引变量(仅在运行时获取其值)来构建这样的编译时符号名。程序运行时,即执行
for
循环时,符号名称不可用,因此没有任何意义


您可能可以设置一个(指针)数组,以使访问更容易循环,但随后您需要初始化数组,该数组将具有相似的外观(但如果这是您的目标的话,可以实现更好的运行时性能)。

在C中没有简单的方法可以做到这一点

根据您使用的框架和硬件,可能有另一种方法来处理CAN结构:

  • 如果需要在循环中更频繁地使用
    MBOX####
    值,可以在适当的位置创建带有指针的数组:

    volatile int*MBOXPOINTERS[]={&CAN.MBOX0,&CAN.MBOX1,/*自己继续*/}

    (将
    volatile int
    替换为相应头文件中使用的任何内容)

  • 如果您有设备数据表,并且您看到字段是连续的,那么您可以定义位于适当地址的数组。但这高度依赖于硬件


这不起作用
这意味着什么?BOOST\u PP\u REPEAT而不是for loop
 ConfigureCAN  (0,0);
 ConfigureCAN  (1,0);