发明一种抽取宏定义的工具

昨天晚上睡觉,想到如何有效的管理代码,确实是个大问题。牵涉到几个方面:

  1. 对于成形的代码如果想添加一点新功能,会有很多测试,这些测试代码在使用一次或几次后,就不一定会再继续使用,那这些代码如何管理?
  2. 对于多人协同开发的代码,如何协调宏,变量名的定义;
  3. 如果能使代码显得优美(主要针对C语言),应该少用宏。但如果很少用宏,那么有些功能不一定能方便实现;
  4. 全局变量的管理?全局变量太多了,而且分散到各个文件中的话,就太难管理了。
  5. 条件编译用多了,会严重影响代码阅读,有时甚至会误导读者。
  6. 头文件的管理。头文件过多,不一定是好事。
  7. 函数声明的问题。当修改函数时,常常忘记修改对应的函数声明,因为他们经常不在一起。这样,会浪费相当多的编译时间;

因此,我就想,有必要将一个工程的(与外部库无关的)所有宏定义都集中在一个头文件中,函数声明也集中在一个文件中,所有的全局变量也集中在一个文件中,它们之间用详细的注释区分开。但这样又好像与分布式开发相矛盾。

我的想法是,设计一个或一套自动化的工具。在编写代码后,用它一分析,就自动把一个文件夹内所有文件中的宏定义,函数声明,等都抽取到一个固定的文件中,并以逻辑组区分开。对于函数声明,我们提供一个工具在编辑器中,当输入函数名时,就自动生成函数声明,在那个全局文件中。当然,如果是本文件内的静态函数,则不再提取出去。每个文件中,就不必再声明什么外部变量,外部函数,因为编译器编译的时候,在本文件中找不到的话,就会自动跑到另外的文件中去找的。

同时,我们应该允许多个头文件的存在,因为在头文件中,还有结构体的定义等等。还有,如果是协同开发的话,我们不可能随时都只用一个头文件,每个开发者都可能新增几个头文件。这样的话,只要能保证正常工作就行。但,这只是对开发版本的要求,如果是一个最终发行的版本,那么,我们仍然要经过自动化工具和手工组织后才发布,这即是我们必须坚持的标准。

实际上,我这个想法不是最新创的,有些项目,已经有类似的代码组织方式了,比如nano编辑器项目。但我所见的都是一些比较小的项目,如果是一个大项目的话,还很少见到有这种方式。

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License