相关疑难解决方法(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和C++中的外部变量有什么区别?

b.c无法编译但b.cpp可以编译.我不太了解C和C++之间的extern的区别.任何人都可以帮助解释为什么b.c不起作用但是b.cpp呢?谢谢.

$ cat b.c 

extern int b;
int a = b;
$ gcc -g -Wall -pedantic -c -o b.o b.c
b.c:4:9: error: initializer element is not a compile-time constant
int a = b;
        ^
1 error generated.
$ cat b.cpp 

extern int b;
int a = b;
$ g++ -g -Wall -pedantic -c -o b.o b.cpp
$ ls -g b.o 
-rw-r--r-- 1 staff 2640 Jan  5 10:22 b.o
Run Code Online (Sandbox Code Playgroud)

c c++ extern

2
推荐指数
2
解决办法
111
查看次数

标签 统计

c ×2

c++ ×1

extern ×1

initialization ×1