首页
社区
课程
招聘
[原创]浅谈如何干净快速地编写代码 + 源码分享
发表于: 2013-9-25 09:47 14195

[原创]浅谈如何干净快速地编写代码 + 源码分享

2013-9-25 09:47
14195
以下为个人觉得比较有意义的一点心得,欢迎大家讨论和分享。
#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
    不解释。。。你懂的。
#2 源代码的建立
    源代码的建立方式太多种了,这里讨论几种典型的方法。
    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 创建时间:>>%C_filename%.c
    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”主程序及其源代码,供有需要的人使用。 
     
#3 源代码的编写
    好了,按照写代码的流程,建立完源文件,就应该到源代码的编写了。我个人嘛,估计还没资格谈“如何写出高质量的程序”,代码风格也有很多人说过了,我就不重复别人的东西了。怎么写代码最快?有人说是复制粘贴。我觉得复制粘贴还不够快。。。
    感觉引进一个类比较快。。。
    使用别人写的框架始终不能得心应手,如果情况允许最好是自己亲手封装常用的类。相对于函数封装、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选项有特殊要求的,我暂时还不知道哪些能清除并且完全不影响原工程,一般全部保留。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 5
支持
分享
最新回复 (23)
雪    币: 3480
活跃值: (246)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
还不错,沙发支持下。
2013-9-25 09:57
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
然后VC工作空间一关闭,便茫然了:我刚才正在写哪个project来着

这一条不靠谱的 。一来VC有历史记录。 二来你不可能把一个项目搬来搬去。最多说去你的Active 下面放一个文件夹的快捷方式。

变通方法

这一条其实不用这么复杂的。 可以自定义工程的模板的。 改掉后,你每次建工程就会是你的模板文件了。
2013-9-25 10:00
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
年轻人 学学svn git吧
2013-9-25 10:02
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
5
不错啊,以前写驱动就是自己DIY EasySys生成模板工程,一秒搞定。
写R3工程能有这么个小程序确实能提高效率,赞一个~
2013-9-25 10:39
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
6
撸主发的BIN还是DEBUG版本的,没法运行
2013-9-25 10:43
0
雪    币: 596
活跃值: (449)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
7
用VS的宏就可以做这些事了
2013-9-25 11:03
0
雪    币: 114
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主能分享心得,难能可贵,良好的代码风格能在一定程度上表现出一个人的逻辑思维能力,还有基本功水平。
2013-9-25 11:17
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
9
我说的确实是个真实事例来的。VC的历史记录?倒没使用过。。。该是我肤浅了。。。
变通方法?其实我好多年没用过这种方法了,这里只是举例。。。现在还有初学者在使用。
2013-9-25 12:20
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
见笑了我没有在其他计算机上测试过。。。如果您需要可以修改源代码的project之后生成Release的。。。
2013-9-25 12:23
0
雪    币: 80
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
LZ那么用心的去做这个,还是要支持下的。我都是很传统的方法~没准以后受LZ影响呢
2013-9-25 12:58
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
菜单里面。就有历史记录的。
2013-9-25 13:21
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
IDE VS2010爽很多。。

源代码管理 Git 啦。。。

自动化功能 还是脚本牛B 一点 (Python?~)
2013-9-25 13:57
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
多谢楼主的分享,很有用的小技巧!另:同是“桶哥”的粉丝吧?
2013-9-25 15:10
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
15
GITHUB
2013-9-25 15:16
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
16
哈哈,你也是玩吉他的吧?。。。挺意外的。。。个人是挺喜欢他的。
2013-9-25 15:32
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
17
好的,接下来应该会找时间学
2013-9-25 15:39
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
18
呵呵,如果能对您有所帮助自然更好了,这也是我发帖的目的。
2013-9-25 15:49
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
19
谢谢支持
2013-9-25 15:54
0
雪    币: 110
活跃值: (522)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
20
感觉压力山大呀。。
2013-9-25 16:17
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
21
支持楼主分享自己的经验~~
2013-9-25 22:32
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
22
O(∩_∩)O~
2013-9-27 17:43
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
牛人啊。多谢啦
很好的工具
2013-9-27 22:51
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
24
不客气。。。您注册的比我还早。。。该是前辈了。。。
2013-9-27 23:02
0
游客
登录 | 注册 方可回帖
返回
//