是否可以使用函数在C中保持井井有条?

Kev*_*ans 14 c conventions

我是一个相对较新的C程序员,我注意到其他更高级别的OOP语言的许多约定并不完全适用于C.

是否可以使用简短的函数来保持编码的有序性(即使它只能被调用一次)?一个例子就是类似10-15行void init_file(void),然后先调用它main().

Law*_*Dol 20

我不得不说,不仅可以,而且通常都会受到鼓励.只是不要通过创建无数微小的功能来过度分裂思路.尝试确保每个函数执行单个内聚,良好... 函数,具有干净的接口(太多参数可以暗示函数正在执行与其调用者不完全分离的工作).

此外,命名良好的函数可用于替换原本需要的注释.除了提供重用之外,功能还可以(或替代地)提供组织代码并将其分解为更容易理解的更小单元的手段.以这种方式使用函数非常类似于创建包和类/模块,尽管处于更细粒度的级别.

  • 我还要添加不要随意中断函数并在下一个函数中继续它们.使中断符合逻辑并尽可能少地传递变量.考虑一下它可以重复使用的地方,即使你现在没有使用它. (2认同)

i_a*_*orf 15

是.请.不要写长函数.写一些做一件事并做得好的短片.他们可能只被召唤一次的事实很好.一个好处是,如果您很好地命名您的函数,您可以避免编写将随着时间的推移与代码不同步的注释.


Rob*_*ves 8

如果我可以自由地从代码完成中做一些引用:

(这些原因的详细内容已经缩写,并且有点解释,完整的解释见全文.)

创建例程的有效原因

注意原因重叠并且不应彼此独立.

  1. 降低复杂性 - 创建例程的最重要原因是降低程序的复杂性(隐藏细节,这样您就不需要考虑它们).

  2. 引入一个中间的,可理解的抽象 - 将一段代码放在一个命名良好的例程中是记录其目的的最佳方法之一.

  3. 避免重复代码 - 创建例程的最常见原因.节省空间并且更易于维护(只需检查和/或修改一个地方).

  4. 隐藏序列 - 隐藏处理事件的顺序是个好主意.

  5. 隐藏指针操作 - 指针操作往往难以阅读且容易出错.将它们隔离到例程中会将焦点转移到操作的意图而不是指针操作的机制.

  6. 提高可移植性 - 使用例程隔离不可移植的功能.

  7. 简化复杂的布尔测试 - 将复杂的布尔测试放入函数中会使代码更具可读性,因为测试的细节不在考虑之中,描述性函数名称总结了测试的目的.

  8. 提高性能 - 您可以在一个地方而不是几个地方优化代码.

  9. 确保所有例程都很小? - 没有.有很多很好的理由将代码放入例程中,这个是不必要的.(这是列入列表的一个,以确保你注意!)

最后一篇文章(第7章:高质量例程)

创建有效例程的最强大的心理障碍之一是不愿意为简单的目的创建一个简单的例程.构建一个包含两到三行代码的整个例程可能看起来有点过分,但经验表明一个好的小例程是多么有用.


Mar*_*ett 5

如果一组陈述可以被认为是一个东西 - 那么让它们成为一个功能


Eva*_*ran 5

我认为这不仅仅是好的,我会推荐它!简单易于证明正确的功能与经过深思熟虑的名称导致代码比长期复杂的功能更自我记录.

任何值得使用的编译器都能够内联这些调用,以便在需要时生成有效的代码.