c - 我是否应该认为声明所有 C 静态函数是一个好习惯?

标签 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 函数仅通过查找表调用,我实际上不需要这些函数的声明。

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

最佳答案

这确实主要是一个品味问题(并且编码风格总是某种程度上是一个见仁见智的问题;你伙伴的风格与将所有代码放在其他定义之后的习惯是一致的) .

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

顺便说一句,让你的函数成为非静态的也有一些优势。例如,在 Linux 上,backtrace(3) & dladdr(3)函数更喜欢全局命名的函数。

另外,有时 computed gotosthreaded code (甚至是一个普通的大型 switch....)比通过指针间接调用 short 函数的表调度更快。 (调用函数的小开销,例如运行它们的序言和结尾,有时可能对微小且快速运行的代码很重要)。请参阅引用资料 here & there .

关于c - 我是否应该认为声明所有 C 静态函数是一个好习惯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35797254/

相关文章:

c - 使用AES算法加密不规则大小的大文件

typescript - 为 TypeScript 库生成一个声明文件

c - 解释为什么变量声明的位置使我无法更改其值

c++ - 类模板显式实例化声明

c - 如何确定Pi(π)的准确度

python - 使用 numpy.take 类型转换错误

c++ - 是否可以将 "delete"放在逗号表达式中

c - 在这种情况下,无限递归调用应该引发堆栈溢出吗?

c - C 中的随机数生成器

php - 查找表 : any better practice?