我是否应该考虑声明所有C静态函数是一个很好的实践?

我最近写了一段像这样的C代码:

static void func1() { } static void func2() { } typedef void (*func_t)(void); const func_t lookUpTable[FUNC_COUNT] = { [FUNC1] = &func1, [FUNC2] = &func2 } 

另一个程序员在同一个文件上工作并将其更改为:

 static void func1(); static void func2(); typedef void (*func_t)(void); const func_t lookUpTable[FUNC_COUNT] = { [FUNC1] = &func1, [FUNC2] = &func2 } static void func1() { } static void func2() { } 

由于funcN函数只通过查询表调用,我实际上并不需要这些函数的声明。

这是一个品味问题,还是一种被认为是好/坏做法的编码风格?

谢谢你的回答!

这确实是一个品味问题(编码风格总是某种意义上的问题;你的伴侣的风格与将所有代码放在每个其他定义之后的习惯一致)。

在实践中,您可以更好地确保您的函数名称在整个程序中是唯一的(它使得grep it更容易,并且gdb将更容易找到它们),即使它们是可见的或仅在一个翻译单元内使用。

顺便说一下,让你的function非静态也有一些优点。 例如,在Linux上, backtrace(3)和dladdr(3)函数对全局命名函数更加满意。

此外,有时计算的gotos和线程代码 (甚至是普通的大型switch ……)比通过指针间接调用函数的表调度更快。 (调用函数的小开销,例如运行他们的序言和结尾,有时可能对微小且快速运行的代码很重要)。 请参阅此处的参考资料。