2011-02-10 36 views

回答

6

它可以做你想做的事情,但是为什么你会避免使用extern,当它正是你想通过一个更复杂的(和不可读的)机制来模拟?

1

C中的静态声明告诉编译器不要添加函数符号表。这意味着如果其他模块需要,提供者无法链接该功能。该函数仍然存在(但对链接器不可见),因此如果将函数的地址记录在指针中,则可以毫无问题地调用该函数。

所以简短的回答是肯定的,没关系。

+1

...或者你可以用一个公共名称编写一个额外的函数,它只是简单地调用静态函数来完成这项工作,但为什么不把原始函数放在第一位呢? – 2011-02-10 21:12:16

0

是的,在隐藏实现时制作公共指针通常是您可能期望的工厂样式模式。

知道自己为什么说“我想全局使用它而不将其重新声明为作为extern”可能很有趣。
为什么要将声明从static(仅在该模块中可用)更改为extern(使其在模块外部可用并将其发布)您想要避免的操作?

0

如果它在全局名称空间中的cpp文件中是静态的,那么该函数只能从该cpp文件中直接使用。它是一种私人帮手功能。

你可以做的是在函数原型上做一个typedef,并引入一个公共函数,该函数返回一个函数指针或一个指向不同函数的指针表,这通常是为了实现插件和有一些回调或API方法注册。 +要点是你没有强大的绑定功能。

0

静态说明符隐含内部链接。

您希望使用外部链接的静态,而不需要显式存储说明符。如果你的函数在命名空间范围内,只需删除'static'说明符。命名空间范围的默认行为在外部链接时是静态的。

相关问题