gpt4 book ai didi

C++ 等价于指定初始化器?

转载 作者:IT老高 更新时间:2023-10-28 12:34:41 24 4
gpt4 key购买 nike

最近我一直在研究一些嵌入式设备,我们有一些结构和 union 需要在编译时初始化,以便我们可以将某些不需要修改的东西保存在闪存或 ROM 中,并且以性能成本节省一点闪存或 SRAM。目前该代码编译为有效的 C99,但如果没有此调整,它过去也可以编译为 C++ 代码,并且支持以这种方式编译的东西也很棒。防止这种情况发生的关键因素之一是我们使用了 C99 指定的初始化程序,这些初始化程序在 C++ 的 C 子集中不起作用。我不是 C++ 爱好者,所以我想知道在 C++ 兼容的 C 或 C++ 中可能有什么简单的方法可以使这种情况发生,仍然允许在编译时进行初始化,这样结构和 union 就不需要了在 SRAM 中程序启动后初始化。

还有一点需要注意:指定初始化器使用的一个关键原因是初始化为不是 union 的第一个成员。此外,为了保持与其他编译器的兼容性,坚持使用标准 C++ 或 ANSI C 是一个加分项(我知道 GNU 扩展提供了类似没有 C99 的指定初始化程序之类的东西)。

最佳答案

我不确定你是否可以在 C++ 中做到这一点。对于需要使用指定初始化器初始化的东西,您可以将它们分别放在编译为 C99 的 .c 文件中,例如:

// 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

关于C++ 等价于指定初始化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/855996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com