最近我一直在研究一些嵌入式设备,其中我们有一些结构体和联合体需要在编译时初始化,以便我们可以将某些不需要修改的东西保留在闪存或ROM中,并节省一点闪存或 SRAM,但会牺牲一点性能。目前,该代码编译为有效的 C99,但如果没有这种调整,它也可以编译为 C++ 代码,并且如果能够支持以这种方式编译的内容,那就太好了。阻止这种情况的关键因素之一是我们使用 C99 指定的初始化程序,它不能在 C++ 的 C 子集中工作。我不太热衷于 C++,所以我想知道有什么简单的方法可以在 C++ 兼容的 C 中实现这种情况,或者在 C++ 中仍然允许在编译时初始化,以便结构和联合不需要程序启动后在 SRAM 中初始化。
另外一点需要注意的是:使用指定初始化器的一个关键原因是初始化为不是联合体的第一个成员。另外,为了保持与其他编译器的兼容性,坚持使用标准 C++ 或 ANSI C 是一个优势(我知道 GNU 扩展提供了类似指定初始化程序的功能,而无需 C99)。
我不确定你能用 C++ 做到这一点。对于需要使用指定初始化程序初始化的内容,您可以将它们单独放在一个.c
文件编译为 C99,例如:
// In common header file
typedef union my_union
{
int i;
float f;
} my_union;
extern const my_union g_var;
// In file compiled as C99
const my_union g_var = { .f = 3.14159f };
// Now any file that #include's the header can access g_var, and it will be
// properly initialized at load time
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)