我是否应该考虑声明所有C静态函数是一个好习惯?

时间:2016-03-04 13:26:14

标签: c declaration lookup-tables

我最近写了一段像这样的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 函数只通过查询表调用,我实际上并不需要这些函数的声明。

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

1 个答案:

答案 0 :(得分:3)

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

在实践中,您可以更好地确保您的功能名称是唯一的(它使grep更容易,并且gdb可以更轻松地找到它们),即使它们是可见的或仅在一个翻译单元内使用。

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

此外,有时computed gotosthreaded code(或者甚至是普通的大switch ....)比间接调用 short 函数的表调度更快通过指针。 (调用函数的小开销,例如运行他们的序言和结尾,有时可能对微小且快速运行的代码很重要)。参见参考文献here& there