gpt4 book ai didi

c++ - C 迁移到 C++(嵌入式)

转载 作者:行者123 更新时间:2023-11-30 02:30:08 25 4
gpt4 key购买 nike

我在纯 C 中有一个项目 - st usb 库,我需要将它迁移到 C++ 并将相同的结构更改为类。我删除了所有 C++“保护”,例如:

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif

我将所有文件扩展名从 .c 更改为 .cpp(HAL 库除外)。我意识到 c++ .hex 比 c .hex 小 7kB。当我查看 .map 文件时,我发现缺少许多功能。我认为是 static 函数导致的,但删除 static 关键字没有帮助。有谁知道可能导致某些函数未编译的原因。当扩展名是 .c 时,一切都很好。

最佳答案

我能想到两个主要原因:

  1. 内联。如果所有用法都可以内联,编译器可以决定不需要将函数作为独立函数发出。
  2. 未使用的代码。编译器可以看到代码中的任何地方都没有使用某个函数,并决定将其从最终结果中删除。

如果结果要用作某种库,即您的环境调用特定函数而无需在您自己的代码中显式调用,我认为最好的方法是将您的代码编译并链接为库(可能是动态库) 并将这些函数导出为库接口(interface)(在 gcc 中可见,在 MSVC 中 dllexport)将强制编译器/链接器将它们包含在生成的二进制文件中,即使它们现在不明白为什么需要它们。(当然,这是对您的目标环境的大胆猜测。)

另一种选择是关闭特定的编译器/链接器优化,以删除死代码并强制为内联函数发出独立函数实例,但我认为这是非常间接的方法,具有更广泛的影响,并且会使以后的维护复杂化。

关于c++ - C 迁移到 C++(嵌入式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38912992/

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