首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态数组初始化与指针外接结构元素?

静态数组初始化与指针外接结构元素?
EN

Stack Overflow用户
提问于 2015-03-06 11:40:14
回答 2查看 1.8K关注 0票数 0

我想静态地初始化一个数组,但是它的一些元素是指向extern结构的指针。

我不能将结构声明为常量,因为它们的元素在其他地方被修改,也不能静态地声明,因为它与extern声明发生冲突。

在静态数组初始化中是否有解决这个问题的方法,或者我必须在一个函数中初始化它?

编辑:在一次出色的启动之后,查看您的示例,我刚刚发现错误是我使用的是PWMD2而不是&PWMD2 (其中PWMD2是外部结构)。

很明显,错误是

错误:初始化器元素不是常量

为了指出我在做什么,代码的一部分(使用ChibiOS)如下:

esc.h

代码语言:javascript
复制
extern struct Engine{
    GPIO_TypeDef *gpio;
    uint8_t pin;

    PWMDriver *driver;
    pwmchannel_t channel;
    pwmcnt_t width;
}engines[];

esc.c

代码语言:javascript
复制
struct Engine engines[] = {
    {GPIOD, 3, &PWMD2, 0, 0},
    {GPIOD, 4, &PWMD2, 1, 0},
    {GPIOD, 6, &PWMD2, 2, 0},
    {GPIOD, 7, &PWMD2, 3, 0},
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-06 11:56:44

详细说明你的问题,因为下面的工作对我来说是可以的,也是你想要做的事情,据我所知:

main.c

代码语言:javascript
复制
#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

代码语言:javascript
复制
#ifndef EXTERNS_H
#define EXTERNS_H

typedef struct {
    int value;
    } struct_int_t;

extern struct_int_t extint;

#endif

externs.c

代码语言:javascript
复制
#include "externs.h"

struct_int_t extint = { 10 };

汇编:

代码语言:javascript
复制
C:\>gcc main.c externs.c

跑:

代码语言:javascript
复制
C:\>a
extint: 10
票数 1
EN

Stack Overflow用户

发布于 2015-03-06 12:04:40

例如,以下内容应该有效。你犯了什么错误?你在哪个编译器和平台上?(您可以酌情删除const --它们不是必需的。)

struct.h

代码语言:javascript
复制
typedef struct My_struct {
    int n;
} My_struct;

extern const My_struct s1, s2;

struct.c

代码语言:javascript
复制
#include "struct.h"

const My_struct s1 = { 1 }, s2 = { 2 };

arr.c

代码语言:javascript
复制
#include <stdio.h>
#include "struct.h"

static const My_struct *const arr[2] = { &s1, &s2 };

int main(void) {
    printf("arr[0]->n = %d, arr[1]->n = %d\n", arr[0]->n, arr[1]->n);

    return 0;
}

用.

代码语言:javascript
复制
$ gcc arr.c struct.c -o struct_arr
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28898016

复制
相关文章

相似问题

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