我在以下程序的第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的内容进行初始化?
也许我只需要改变我的策略,并在启动时使用初始化功能完成所有副本.除非有其他想法吗?
因此,在编译以下代码时,我得到'initializer element not constant'错误:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
float wl = 2.0f;
float k = 2.0f * (float) M_PI / wl;
int main ()
{
//Do stuff
}
Run Code Online (Sandbox Code Playgroud)
如果我"float k"在main方法中移动,没有错误,但这对我来说不是一个选项,因为我需要浮动k作为全局变量.即使我改变它:
const float wl = 2.0f;
const float k = 2.0f * (float) M_PI / wl;
Run Code Online (Sandbox Code Playgroud)
错误仍然发生.我该如何解决?
在阅读stackoverflow中的一些问题和答案时,我遇到了这个问题
我试图理解它,但答案很难理解,特别是像这样的术语
静态存储时间
在翻译阶段无法评估表达式
等等...
此外,我认为常数总是常数(这是我从学校学到的)
有人可以让它有点容易理解吗?
在以下示例中:
static inline void foo(const int varA)
{
...
__some_builtin_function(varA);
...
}
int main()
{
foo(10);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里的 varA 被视为编译时常量吗?
请注意,我使用的是 C,而不是 C++。
任何到标准或描述编译时常量的可靠文档的链接,特别是它们与形式参数的关系,将不胜感激。