Category Archives: C&C++

现在还靠他吃饭呢

VIM自动给脚本加注释(转载)

写程序的时候给代码注释有时候蛮烦人的,尤其是用英文写注释的时候,不过养成写注释的习惯,对日后代码的维护还是很有帮助的,一般脚本的开头会注明编写时间,版本,用途等说明。 VIM 里面可以使用映射(map)来帮你自动插入这些信息,就像下面这样 #**************************************************** #         Author: Muddyboot – toobyddum@gmail.com #  Last modified: 2007-08-10 21:19 #       Filename: /etc/vimrc #    Description: Configuration for vim editor #**************************************************** 其中 Last modified 后面的时间是根据当前时间自动插入的,Filename 后的文件名也是当前编辑的文件名。

Posted in C&C++, linux应用, 技术为本 | 1 Comment

如何在C/C++代码中执行一个DOS命令(Win平台)

简单来说可以有三种方式可以实现: int system( const char *command ). UINT WinExec( LPCSTR lpCmdLine, UINT uCmdShow ). HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd ).

Posted in C&C++, 技术为本 | Tagged , , | Leave a comment

为什么预编译头(Precompiled Header)能够提高编译速度?

上一篇博客我解释了“为什么可以引用未包含的头文件内容?”,这也让我想起了另外一个问题:“为什么预编译头(Precompiled Header)能够提高编译速度?”。既然要刨根问底,不妨再解释一下这个问题。其实呢,只要理解“编译 – 链接”这两个步骤各自的作用和一般编译器提高编译速度的方式,那这个问题是小菜一碟啊。

Posted in C&C++, 为什么?, 技术为本 | Leave a comment

为什么可以引用未包含的头文件内容?

缘起 最近几天奉老大之命学习研究了一下VCF和VCFBuilder。我在修改编译错误的时候发现有些头文件里面引用了其他头文件里面的类,但是在该头文件里面有没有引入任何其他头文件。编译的时候也没有提示这个错误,按照我的惯性思维,这很不可思议啊!这也让我想起了VC编译环境提供的预编译头StdAfx.h也是这个现象,当时就很纳闷,可是没仔细想。这次又碰到了,忍不住想弄个明白,问了几个大虾,没有答案。那就自己来吧。

Posted in C&C++, 为什么?, 技术为本 | 1 Comment

CTreeCtrl 树状控件显示展开和折叠的按钮“+/-”

让树状控件显示展开和折叠的按钮其实是很简单的,把 Style 设置成TVS_HASBUTTONS就可以了。不过你可能会发现根节点却没有展开折叠按钮,咋回事呢?折腾半天也没作用,还是看看MSDN的文档吧。 TVS_HASBUTTONS Displays plus (+) and minus (-) buttons next to parent items. The user clicks the buttons to expand or collapse a parent item’s list of child items. To include buttons with items at the root of … Continue reading

Posted in C&C++ | Leave a comment

解析命令行参数规则 (Parsing C Command-Line Arguments)

这里说的解析命令行参数,并不是说类似getopt的解析函数,而是说win平台的命令行参数是按什么规则传入程序的。前两天我写了个命令行的程序,程序对根目录的处理总是有问题。经过跟踪,发现当输入参数是(“D:\”)的时候,实际程序读到的参数是(D:”)。在路径的两端加上引号,是为了让路径名称中出现空格的时候不会作为参数分隔符处理。可是显然最后一个引号被\转移为 ” 了。 求助于MSDN,终于找到了命令行解析的规则,原文链接:http://msdn2.microsoft.com/en-us/library/aa243471.aspx。这里我做一下翻译: 参数用空格或者TAB进行分割。 一个字符串若被两个双引号包含,则即使其中包含空格或TAB字符也会被视为一个参数。被引起来的字符串可以嵌入参数内。 字符串中存在的双引号可以通过前置反斜杠进行转义。 反斜杠会被解释成单个字符,除非后面紧接着一个双引号。 如果偶数个反斜杠后面跟随一个双引号,每对反斜杠放一个反斜杠到参数中,双引号被解释为一个字符串界定符。 如果奇数个反斜杠后面跟随一个双引号,每对反斜杠放一个反斜杠到argv数组中,双引号则被剩下的反斜杠转义放入到argv中,而不会作文字符串界定符。 这里有几个例子,一看就明白了: Command-Line Input argv[1] argv[2] argv[3] “a b c” d e a b c d e “ab\”c” “\\” d ab”c \ d a\\\b d”e f”g h a\\\b de fg h … Continue reading

Posted in C&C++, 技术为本 | Leave a comment

为发布自动化做点贡献——makefile 中使用 xcopy

用makefile做好了一个工程,不同的模块源代码将会被置于不同的文件夹下,而编译后往往也都只是生成在当前编译的目录下。发布的时候就有点麻烦了,比较笨拙的方法就是,一个个的拷贝出来然后再进行打包。这样显然非常繁琐,如果工程的规模较大,这将是一件非常枯燥的事情。如果把这个枯燥的事情变得自动化是不是比较美好呢? 嘿,这其实是很简单的,你只需要在每一个模块生成的命令的后面利用xcopy来拷贝到目的路径就可以了。这个命令是这么写的: DIST_PATH = D:\dist\bin xcopy /y /r /d /f .\*.dll $(DIST_PATH) 有了这句话,就会把当前编译文件夹下生成的所有DLL都拷贝到目的路径下。下面我来解释一下他们含义: “DIST_PATH = D:\dist\bin” 这样定义一个变量作为发布的路径。 好处是:可以做到一改全改,大家都可以理解咯。 需要注意的是:路径不允许用Unix的`/’来进行分割,xcopy是不认识的。 xcopy 语句的几个参数,可以在dos命令符下用xcopy /?得到帮助。 /y 关闭文件被覆盖的提示信息,保证流程自动化,避免流程被打断。 /r 可以覆盖只读文件,确保拷贝工作的顺利进行:-)。 /d 根据日期,以新文件覆盖旧文件,减少必要的拷贝。 /f 在拷贝的时候显示全部源文件名和目标文件名。 看了这个解释是不是已经能够透彻的理解啦?:-) 当然如果要让这个发布流程都自动化,这样简单的尝试显然是不够的,日后再慢慢探讨吧。

Posted in C&C++ | Tagged | Comments Off