gpt4 book ai didi

c - C 中没有函数指针的运行时代码路径?

转载 作者:行者123 更新时间:2023-12-03 11:56:31 25 4
gpt4 key购买 nike

我知道这可能不是一个真正的问题。但是我在这里查看我开始编写的新代码并且想知道一些事情。

我必须编写通常需要在多个平台上运行的代码。我总是以两种方式处理这个问题。

当存在足够多的平台差异以至于几乎要完全重写代码时,我会为包含上述平台代码的平台的这些模块创建单独的目录,并根据平台从目录中的源代码进行编译。

例如:

|-- module_a
|-- module_b
| |-- linux
| |-- osx
| `-- windows
`-- module_c

Makefile 会调用与平台无关的 module_b 源代码和 module_b/[os]/代码,具体取决于平台。

除非没有那么多代码要重写,否则一切都很好而且很酷。然后,这往往会导致大量复制/粘贴,我倾向于避免这种情况,因为它会导致错误,而且坦率地说,感觉很笨拙。

第二个变体也与我遇到的一个问题重叠,我有时需要优化和未优化版本(不要问)相同的代码和类似的情况。这让我想到了函数指针。

第二个问题解决方案也可以正常工作。但是,我知道函数指针可能会导致编译器在优化代码时不太高兴的问题。

我的新代码会有很多这样的东西,所以我想知道,是否有第三种可能性让运行时代码路径对编译器(也许是 cpu?)友好?

请注意,我完全避免为此使用#ifdefs。如果重要的话,我在所有三个平台(是的,甚至是 OSX)上使用 gcc 5.2(和快照)在 C99 中编程。所以我也对扩展持开放态度。

附言我已经尝试过 programmers.stack 好几次了,但遗憾的是它是一座鬼城。

最佳答案

如果可以为每个平台编译单独的二进制文件,则无需为不同平台切换任何运行时代码路径。

仅当您为多个硬件构建相同的镜像(显然基于相同的处理器)并且仅使用在运行时选择的不同模块进行配置时,才需要用于平台支持的运行时控制流。这允许一个模块以多种不同的形式出现,但可以使用普通的全局函数调用来调用,而不是通过函数指针间接调用。

关于c - C 中没有函数指针的运行时代码路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33882042/

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