gpt4 book ai didi

c++ - 通过函数指针从外部文件调用静态函数的坏习惯?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:55 25 4
gpt4 key购买 nike

考虑以下代码:

file_1.hpp:

typedef void (*func_ptr)(void);

func_ptr file1_get_function(void);

文件1.cpp:

// file_1.cpp
#include "file_1.hpp"
static void some_func(void)
{
do_stuff();
}

func_ptr file1_get_function(void)
{
return some_func;
}

文件2.cpp

#include "file1.hpp"
void file2_func(void)
{
func_ptr function_pointer_to_file1 = file1_get_function();
function_pointer_to_file1();
}

虽然我相信上面的示例在技术上是可行的 - 仅通过函数指针调用具有内部链接的函数,但这样做是不好的做法吗?是否会发生一些时髦的编译器优化(例如自动内联),从而使这种情况成为问题?

最佳答案

没问题,这很好。事实上,恕我直言,这是一种很好的做法,它可以让您的函数在不污染外部可见符号空间的情况下被调用。

在函数查找表的上下文中使用此技术也是合适的,例如一个计算器,它传入一个表示运算符名称的字符串,并期望返回一个指向执行该操作的函数的函数指针。

不允许编译器/链接器进行破坏正确代码的优化,这是正确的代码。

历史记录:早在 C89 中,外部可见符号的前 6 个字符必须是唯一的;这在 C99 中放宽了,并且通常通过编译器扩展。

关于c++ - 通过函数指针从外部文件调用静态函数的坏习惯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30793028/

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