未使用的功能警告

时间:2014-10-10 21:12:38

标签: c xcode

我在头文件中添加了static关键字的方法。 e.g。

static int32_t Tlvlist_AddRawt(Tlvlist *a, uint8_t type, uint16_t size, const void *bytes);

该方法在.c文件中实现静态 函数名称中不存在关键字。

从同一.c文件的另一个函数调用此方法。 后一个函数(使用此静态函数)也从main调用。

但我收到警告:"未使用的功能' Tlvlist_AddRawt'"在头文件中。 为什么会这样?

PS。我使用Xcode。

2 个答案:

答案 0 :(得分:7)

将函数声明标记为静态时,它在出现的转换单元外部不可见。而且,它在每个出现的翻译单元中代表不同的功能。因此,在头文件中使用static几乎不是一个好主意,因为这样你就会在包含头文件的每个C源中声明一个单独的函数。

编译器诊断告诉您至少有一个C文件包含您的标头但未提供Tlvlist_AddRawt()的定义以与标头中的声明一起使用。

如果要将静态函数与其定义分开声明 - 例如将其原型化为源文件中较早出现的其他函数 - 则将声明放在C源文件的顶部。正文出现而不是在标题中。将它放在标题中会适得其反。

答案 1 :(得分:4)

您永远不会在用于其他模块的头文件中声明static函数,因为创建函数static背后的目的是将其“隐藏”到模块外部的用户。静态C函数仅在定义它们的转换单元 * 内可见。当函数声明为static时,但同一翻译单元中没有其他函数使用它时,您会收到“未使用的静态”警告。

如果您想在一个文件中定义一个函数,并在另一个文件中使用它,您需要将其前向声明放在标题中,包括来自两个翻译单元的标题,并将翻译结果链接在一起。从标头中删除static关键字可以解决此问题。

* 翻译单元是.c文件的奇特名称。