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_LOCK
和 RELEASE_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/