使用指向外部结构元素的指针进行静态数组初始化?

莱斯托

我想静态初始化一个数组,但是它的某些元素是指向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},
};
布莱恩·西德伯瑟姆(Brian Sidebotham)

详细说明您的问题,因为以下内容对我来说很有效,而就我所知,这就是您要执行的操作:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章