C 源文件中的代码排序-转发声明与;Don';不要重复你自己的话;?

C 源文件中的代码排序-转发声明与;Don';不要重复你自己的话;?,c,coding-style,C,Coding Style,如果您使用C编写代码,并将编译器配置为在使用所有函数之前声明它们(或者如果您使用C++编写代码),那么您的源文件最终可以使用(至少)两个组织中的一个 要么: 标题 转发此文件中(静态)函数的声明 外部功能(主要入口点) 静态-非公共-函数 或: 标题 静态-非公共-函数 外部功能(主要入口点) 我认识到C++中,“static”这个词不是首选,但我主要是C程序员,C++中有等价的概念,即文件中的匿名命名空间中的函数。 问题: 您使用哪种组织,为什么您更喜欢它 作为参考,我自己的代码使

如果您使用C编写代码,并将编译器配置为在使用所有函数之前声明它们(或者如果您使用C++编写代码),那么您的源文件最终可以使用(至少)两个组织中的一个

要么:

  • 标题
  • 转发此文件中(静态)函数的声明
  • 外部功能(主要入口点)
  • 静态-非公共-函数
或:

  • 标题
  • 静态-非公共-函数
  • 外部功能(主要入口点)
<>我认识到C++中,“static”这个词不是首选,但我主要是C程序员,C++中有等价的概念,即文件中的匿名命名空间中的函数。 问题:
  • 您使用哪种组织,为什么您更喜欢它
作为参考,我自己的代码使用了第二种格式,这样静态函数在使用之前就已经定义好了,这样就不需要同时声明和定义它们,这样就节省了关于函数接口的信息写两次的时间,这反过来又减少了(略微减少了)内部接口需要更改时的开销。这样做的缺点是,文件中定义的第一个函数是最低级别的例程——这些例程是由文件中稍后定义的函数调用的——因此,它不是将最重要的代码放在顶部,而是更接近文件的底部。这对你有多重要

我假设所有外部可访问的函数都是在头文件中声明的,并且这种形式的重复是必要的——我认为这不应该引起争议。

对我来说是第二位

我认为使用静态或其他方法将模块函数和变量私有化到模块是一种很好的做法

我更喜欢将api函数放在模块的底部。相反,我将api函数放在类的顶部,因为类通常是可重用的。将api函数放在顶部可以更容易地快速找到它们。大多数IDE可以非常直接地将您带到任何函数。

我一直使用方法#1,原因是我希望能够快速判断特定文件中定义了哪些函数,并在一个位置查看它们的签名。我不认为必须随函数定义一起更改原型的论点特别有说服力,因为不管怎样,您通常都会更改调用已更改函数的所有代码,而在执行时更改函数原型似乎相对简单。

(谈论C代码)

第二,因为我总是忘记更新forward decls来反映静态函数的变化

但我认为最好的做法应该是