相关疑难解决方法(0)

尝试使用const初始化变量时,错误"初始化元素不是常量"

我在以下程序的第6行(初始化my_foo到foo_init)时收到错误,我不确定我理解为什么.

typedef struct foo_t {
    int a, b, c;
} foo_t;

const foo_t foo_init = { 1, 2, 3 };
foo_t my_foo = foo_init;

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请记住,这是我正在研究的大型多文件项目的简化版本.目标是在目标文件中有一个常量,多个文件可用于初始化状态结构.由于它是一个资源有限的嵌入式目标,并且结构不是那么小,我不想要源的多个副本.我不想使用:

#define foo_init { 1, 2, 3 }
Run Code Online (Sandbox Code Playgroud)

我也在尝试编写可移植代码,所以我需要一个有效的C89或C99解决方案.

这是否与目标文件中的ORG有关?初始化变量进入一个ORG并通过复制第二个ORG的内容进行初始化?

也许我只需要改变我的策略,并在启动时使用初始化功能完成所有副本.除非有其他想法吗?

c initialization

175
推荐指数
4
解决办法
22万
查看次数

C中文件范围的可变修改数组

我有一些像这样的代码:

static int a = 6;
static int b = 3;

static int Hello[a][b] =
{
    { 1,2,3},
    { 1,2,3},
    { 1,2,3},
    { 1,2,3},
    { 1,2,3},
    { 1,2,3}
};
Run Code Online (Sandbox Code Playgroud)

但是当我编译它时,它说错误:

在文件范围内可变地修改了"Hello"

怎么会发生这种情况?我该怎么办呢?

c arrays static

30
推荐指数
2
解决办法
6万
查看次数

在C中,为什么const变量不能用作数组大小初始值设定项?

在以下代码中,const int不能用作数组大小:

const int sz = 0;
typedef struct
{
   char s[sz];
} st;

int main()
{
   st obj;
   strcpy(obj.s, "hello world");
   printf("%s", obj.s);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

12
推荐指数
3
解决办法
4903
查看次数

struct member数组大小基于跨文件的const int

所以我希望在编译时知道结构中数组大小的定义.我也希望这个号码可以作为变量使用,以方便以后使用.我所拥有的是以下内容:

const int BANANA_ARRAY_SIZE = 10;

typedef struct
{
  char bananas[BANANA_ARRAY_SIZE];
  int some_other_stuff;
} banana_struct;
Run Code Online (Sandbox Code Playgroud)

这个功能很好.但是,如果我将它放在一个包含在多个位置的.h文件中,编译器会抱怨重新定义BANANA_ARRAY_SIZE(这是有道理的).所以我需要将它声明为extern,因此多个编译单元可以知道它.

所以,我现在有

extern const int BANANA_ARRAY_SIZE;

typedef struct
{
  //.. same as before
} banana_struct;
Run Code Online (Sandbox Code Playgroud)

在我的实施文件中

const int BANANA_ARRAY_SIZE = 10;
Run Code Online (Sandbox Code Playgroud)

但是现在编译器不会让我再次定义结构了

fields must have a constant size: variable length array in structure
Run Code Online (Sandbox Code Playgroud)

有什么方法可以实现我想要的(将数组的长度存储在变量中并用于定义struct)?

编辑:

为了回应使用#defines 的建议,我宁愿不这样做.

我的问题是如何将这个常量值存储在变量中,还用于设置结构中数组的长度.如果你需要进一步的理由,假设我需要一个带有指向int的指针的函数.不能参考#define.

c arrays struct

5
推荐指数
1
解决办法
1750
查看次数

标签 统计

c ×4

arrays ×2

initialization ×1

static ×1

struct ×1