[原创]浅谈如何干净快速地编写代码 + 源码分享
以下为个人觉得比较有意义的一点心得,欢迎大家讨论和分享。
#1 目录的管理
- 我觉得写程序的人至少应该维护好三个目录(目录名随意,这里只是说明用途):
1. Active Project
这个目录用于保存当前正在写的、未完成的project。我曾见到有人把完成的和未完成的projects统统都放在同一个目录下,然后VC工作空间一关闭,便茫然了:我刚才正在写哪个project来着???。。。。。。
如果你把正在写的project统一放在Active Project目录下,那么一眼看去就明了了,因为一般你不会同时写好多个projects。
2. Finished Source Files
顾名思义,这个目录存放写好了的源代码。一个project完成后,就应该从Active Project转移到Finished Source Files,以保持Active Project目录的干净。为什么不叫Finished Project 呢?因为大部分程序员都使用好几种语言,比如javascript啊之类的,写这类代码一般不用建立项目。
这样一说,逻辑好像又乱了——那么照这样说,Active Project也不应该叫做Active Project啊。。。哈哈,懒得改了,习惯了。
3. Backup Files
不解释。。。你懂的。
- 源代码的建立方式太多种了,这里讨论几种典型的方法。
1. 传统方法
Step 1 建立项目
Step 2 添加源文件
Step 3 从零开始,输入那重复了无数次的
#include <iostream>
using namespace std ;
int main()
{
return 0;
}
评论:速度极慢,最令人崩溃的是要重复那个main函数
2. 变通方法
建立一个模板文件,例如template.cpp , 该文件内编写有一个简单的程序主体。新建源代码的时候就把它拷贝到Active Project目录下,然后改掉文件名,双击打开。。。
评论:比方法一省掉了许多无用功,曾经我也经常用这个方法
3. 我自己的方法
3.1. 使用批处理
很多时候我解决问题第一个想到的东西就是批处理
下面一段代码功能就是在当前目录下建立一个简单的C语言main函数, 并添加时间、作者等信息注释,最后从命令行启动VC打开该文件
@echo off
color a4
cls
echo 请输入文件名
set /p C_filename=
md %C_filename%
cd %C_filename%
echo /***************************************>>%C_filename%.c
echo 程序说明>>%C_filename%.c
echo 创建
date /t>>%C_filename%.c
time /t>>%C_filename%.c
echo.>>%C_filename%.c
echo ***************************************/>>%C_filename%.c
echo #include "stdio.h" >>%C_filename%.c
echo. >>%C_filename%.c
echo int main() >>%C_filename%.c
echo { >>%C_filename%.c
echo.>>%C_filename%.c
echo return 0; >>%C_filename%.c
echo } >>%C_filename%.c
start "C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE" %C_filename%.c
运行截图:

输入Test , 按回车后:

评论:这种方法比上一种方法快。
3.2. 编写win32程序
为了取得更大的灵活性,只好编写一个正规的程序了。叫什么名字好呢?想了想,就叫“代码生成器”好了。
这是一年前写的1.3版本

这下子更简单了,如果只是建立一个临时测试程序,连文件名都不用填了,直接敲下回车键,程序就生成源文件并启动VC。
这是生成头文件的截图:

这是生成源文件的截图:

评论:感觉已经不能再快了。。。在写控制台程序的时候,我从来都离不开这个小小的“代码生成器1.3”
3.3. 编写MFC程序
上面那个“代码生成器”是直接调用API写的,既然说要“快速地”编写代码,那么用MFC自然要更快些。。。为了取得更大的灵活性,又用MFC写了一个“代码生成器2.0”。在保留了前版本程序的功能之外,允许用户添加自己编写好的源程序范本到模板库,然后根据范本创建新文件。在此附上“代码生成器2.0”主程序及其源代码,供有需要的人使用。


- 好了,按照写代码的流程,建立完源文件,就应该到源代码的编写了。我个人嘛,估计还没资格谈“如何写出高质量的程序”,代码风格也有很多人说过了,我就不重复别人的东西了。怎么写代码最快?有人说是复制粘贴。我觉得复制粘贴还不够快。。。
感觉引进一个类比较快。。。
使用别人写的框架始终不能得心应手,如果情况允许最好是自己亲手封装常用的类。相对于函数封装、dll封装,我更喜欢类的封装,类相对函数显得更紧凑一些,相对于dll,可以直接修改源码。。。反正我不能保证我写的dll内部完美无缺,但是如果类在使用的过程中出了问题我可以直接修改源码进行完善。。。dll就麻烦多了。
#4 扫尾、备份
如果是控制台程序的话,为了节省空间和时间,我们在进行代码备份时一般只需要保存源文件和头文件,那么其他中间文件该怎么删掉呢?手工删除的话,是件麻烦事。。。有人问:你是写程序的,不会自己写个程序删除啊?。。。这样自然可以,不过还有个懒方法,那就是使用批处理。。。
del /f /s /q *.dsw
del /f /s /q *.dsp
del /f /s /q *.ncb
del /f /s /q *.opt
del /f /s /q *.plg
for /f "usebackq tokens=1* delims=/" %%a in (`dir /s /b /a:d ^| findstr /i "\\Debug$"`) do rmdir /s /q "%%a"
这段简单的代码就可以清除当前目录和子目录下除源文件外的其他文件了。
如果是MFC的project,可以只清除debug目录:
for /f "usebackq tokens=1* delims=/" %%a in (`dir /s /b /a:d ^| findstr /i "\\Debug$"`) do rmdir /s /q "%%a"
如果是原始SDK的project 或者project选项有特殊要求的,我暂时还不知道哪些能清除并且完全不影响原工程,一般全部保留。
