c - 访问文件外部的静态函数

标签 c static

Contiki 3.0 将 setreg() 声明为 static,而在早期版本中则不是 static。我需要访问文件外部的函数来执行 setreg(CC2420_MDMCTRL0,0)。 (https://github.com/contiki-os/contiki/blob/master/dev/cc2420/cc2420.c#L392)

从函数原型(prototype)中删除 static 关键字是否合适? 处理此类案件的标准做法是什么?

最佳答案

我不熟悉该特定代码,但如果一个函数被声明为static,则意味着它在其 translation unit 之外不可见。 .

我猜该软件的作者有充分的理由隐藏该 setreg 函数。你应该问他们为什么。

我想他们希望您调用一些公共(public)函数(例如cc2420_set_cca_threshold)来调用内部setreg。显然,大多数此类函数都是使用 GET_LOCKRELEASE_LOCK 锁定和解锁某些内容。

Is it good to just remove the static keyword from the function prototype?

不,这可能是非常错误的

What is the standard practice to deal with such cases?

花很多时间来了解特定的软件,研究其文档和源代码,了解编码人员使用的隐式不变量,并遵循它们。

(盲目地乱搞一些类似操作系统的代码肯定会导致灾难;如果做错了事情,您甚至可能会损坏硬件)

关于c - 访问文件外部的静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42454945/

相关文章:

C - undefined reference - 除了使用 -lm 进行编译之外,还有其他选择吗?

c++ - 在 C/C++ 中使用带有 GPGME 的特定公钥验证 GPG 签名

java - 为什么静态变量被认为是邪恶的?

c++ - 如何通过类构造函数访问私有(private)静态成员变量?

c++ - Makefile 依赖中 breakoutline 的逻辑

c - 为什么 fopen/fprintf 没有竞争条件

C 程序 - 指针数组乘法

java - 执行java字段中的代码

java - Java 中静态方法的替代方法

c++ - 成员函数作用域变量