gpt4 book ai didi

c++ - 如果仍然可以间接执行(通过回调函数),将 C 函数声明为静态函数是不好的做法吗?

转载 作者:行者123 更新时间:2023-12-01 12:00:41 25 4
gpt4 key购买 nike

我有一个用于嵌入式系统的 C 模块( foo.cfoo.h ),其中包含一个函数 my_driver_fn()从 API 的角度来看,它在范围内是本地的(例如,不在 foo 的公共(public) header 中:不应允许通过 #include "foo.h" 使用其 API 的任何其他代码调用此函数)。假设 my_driver_fn()是可重入的。

但是,foo使用库 libdostuff需要使用一些用户提供的回调函数(架构/硬件特定的东西)对其进行初始化,以使其在任何平台上正常工作。在 foo , my_driver_fn上面提到的将是有问题的功能之一...libdostuff 需要, 但不是由使用 foo 的任何人.

对于这些回调函数(在 my_driver_fn() 中声明为 staticfoo.c 是不是错误的形式、危险、不利、以任何方式妨碍编译器或编译器可以利用的未定义行为?鉴于它的地址提供给 libdostuff 并且它被“间接”调用(尽管从未直接调用)?

注意:我碰巧同时写了 foolibdostuff , 我想知道用户提供的函数是否更有意义 extern并且纯粹在链接时解决,或传递给 libdostuff通过在初始化函数中提供的用户提供的回调表(例如 libdostuff_init(CallbackTable *user_callbacks) 其中 CallbackTable 有一个函数指针,该指针将被初始化为指向 my_driver_fn )

最佳答案

在我看来,这是一个很好的做法。 static是指名称的可见性,仅此而已。

如果其他翻译单元不需要使用该名称,则标记为static降低了外部可见函数的“命名空间”发生冲突的风险。

关于c++ - 如果仍然可以间接执行(通过回调函数),将 C 函数声明为静态函数是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62274833/

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