我最近写了一段像这样的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 函数只通过查询表调用,我实际上并不需要这些函数的声明。
这是一个品味问题,还是一种被认为是好/坏做法的编码风格?
答案 0 :(得分:3)
这确实是一个品味问题(编码风格始终某种意义上的问题;你的伴侣的风格与将所有代码置于其他定义之后的习惯一致)
在实践中,您可以更好地确保您的功能名称是唯一的(它使grep
更容易,并且gdb
可以更轻松地找到它们),即使它们是可见的或仅在一个翻译单元内使用。
此外,有时computed gotos和threaded code(或者甚至是普通的大switch
....)比间接调用 short 函数的表调度更快通过指针。 (调用函数的小开销,例如运行他们的序言和结尾,有时可能对微小且快速运行的代码很重要)。参见参考文献here& there