我想静态初始化一个数组,但是它的某些元素是指向extern struct的指针。
我无法将结构声明为常量,因为它们的元素已在其他地方进行了修改,因为它与extern声明冲突,因此也不是静态的。
有没有一种方法可以在静态数组初始化中解决此问题,或者我必须在函数中对其进行初始化?
编辑:伟大的启动后看您的示例,我只是发现错误是我正在使用PWMD2
而不是&PWMD2
(其中PWMD2是外部结构)。
显然错误是
错误:初始化元素不是恒定的
只是指出我在做什么,部分代码(使用ChibiOS)如下:
esc.h
extern struct Engine{
GPIO_TypeDef *gpio;
uint8_t pin;
PWMDriver *driver;
pwmchannel_t channel;
pwmcnt_t width;
}engines[];
esc.c
struct Engine engines[] = {
{GPIOD, 3, &PWMD2, 0, 0},
{GPIOD, 4, &PWMD2, 1, 0},
{GPIOD, 6, &PWMD2, 2, 0},
{GPIOD, 7, &PWMD2, 3, 0},
};
详细说明您的问题,因为以下内容对我来说很有效,而就我所知,这就是您要执行的操作:
main.c
#include <stdio.h>
#include "externs.h"
static struct_int_t* initextint[1] = { &extint };
int main( int argc, char* argv[] )
{
printf( "extint: %d\n", initextint[0]->value );
return 0;
}
externs.h
#ifndef EXTERNS_H
#define EXTERNS_H
typedef struct {
int value;
} struct_int_t;
extern struct_int_t extint;
#endif
externs.c
#include "externs.h"
struct_int_t extint = { 10 };
编译:
C:\>gcc main.c externs.c
跑:
C:\>a
extint: 10
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句