我是否应该认为声明所有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-ing对他们来说更容易,而且gdb会更容易地找到他们)在整个程序中,即使它们是可见的或只使用一个内部的翻译单元。

顺便说一句,让您的功能为非静态也有一些好处。例如,在Linux上,backtrace(3)dladdr(3)函数更适合使用全局命名的函数。

而且,有时计算出的goto线程代码(甚至是普通的大号switch....)比通过指针间接调用short函数的表分派要快(调用函数的少量开销(例如,运行其序言和结语)有时可能对于微小且快速运行的代码很重要)。见参考这里那里

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将callBacks传递给redux异步操作是否被认为是一种好习惯?

在单元测试中使用反射来测试注释的存在是否被认为是一种好习惯?

使用带有Go上下文作为参数的SQL函数是否是一种好习惯?

让所有类都具有继承性是一种好习惯吗

在头文件中定义C ++函数是否是一种好习惯?

从函数内部操纵函数参数是否是一种好习惯?

密封案例类是否是一种好习惯?

在API中对参数验证抛出异常是否被认为是一种好习惯?

缩进内联注释是否是一种好习惯?

模块返回JSONArray是否是一种好习惯?

将`char []`传递给接受`std :: string&`的函数是否是一种好习惯?

缩短传递给道具的元素在反应中是否被认为是一种好习惯?

拥有“这不应该发生”的说法是否是一种好习惯?

将常量参数绑定到构造函数中的方法是否是一种好习惯

使用非成员函数是一种好习惯吗?

在网络应用程序中同时使用CMS和Laravel的组合是否被认为是一种好习惯?

静态导入是一种好习惯吗?

将所有变量和函数置于私有状态是一种好习惯吗?

公开struct属性的地址是否是一种好习惯?

在s上读取一行并返回其长度的函数是否是一种好习惯?

使用Task.ContinueWith()作为事件“ TaskEnded”的形式是否被认为是一种好习惯?

这种减小在if语句中声明的变量范围的模式是否是一种好习惯?

Python:在内部调用函数是否是一种好习惯?

创建单元测试时,在方法中修补所有调用是否是一种好习惯?

在函数内使用裸括号是否是一种好习惯?

避免使用`sudo su`是否被认为是一种好习惯?

在Python中使用类型作为字典键是否被认为是一种好习惯?

在 shell 脚本中使用带有完整路径名的二进制文件是否被认为是一种好习惯?

在 pytest 中使用太多工厂是否被认为是一种好习惯?