免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 34538 | 回复: 65
打印 上一主题 下一主题

【八仙过海,各显神通】大家把平时编程时用的技巧,都贴上来吧! [复制链接]

论坛徽章:
0
1 [报告]
发表于 2004-07-20 16:04 |只看该作者

【八仙过海,各显神通】大家把平时编程时用的技巧,都贴上来吧!

原帖由 "flw" 发表:
大家把平时工作、学习中常用的编写代码的技巧,都写一下吧!复杂的、简单的,都不局限,关键是要写清楚,让别人能看明白。
这个帖子本来是另外一个帖子的回复,但是由于已经明显偏题且值得引导,所以现在把它分离出来,望大家继续!


说到宏的作用,我也说一个技巧:

#if 0
/*some code going here*/
#endif
这也是一个注释代码的方法,如果想让上面的代码生效,改成#if 1就可以了,用在调试方面很不错的

论坛徽章:
0
2 [报告]
发表于 2004-07-20 21:52 |只看该作者

【八仙过海,各显神通】大家把平时编程时用的技巧,都贴上来吧!

原帖由 "converse" 发表:
说到宏的作用,我也说一个技巧:

#if 0
/*some code going here*/
#endif
这也是一个注释代码的方法,如果想让上面的代码生效,改成#if 1就可以了,用在调试方面很不错的


   我就喜欢这样用~ 比 /* */ 更明白

还可以
#if 0
...
#else
...
#endif

更方便的还可以
#define DEBUG_CODE   0

...

#if DEBUG_CODE
...
#else
...
#endif

论坛徽章:
1
15-16赛季CBA联赛之四川
日期:2016-02-15 17:12:32
3 [报告]
发表于 2004-07-21 01:24 |只看该作者

【八仙过海,各显神通】大家把平时编程时用的技巧,都贴上来吧!

up 顶

论坛徽章:
0
4 [报告]
发表于 2004-07-21 10:33 |只看该作者

【八仙过海,各显神通】大家把平时编程时用的技巧,都贴上来吧!

都用到了升华地步了,我也虚心学习.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2004-07-21 15:36 |只看该作者

【八仙过海,各显神通】大家把平时编程时用的技巧,都贴上来吧!

说到注释代码,
我有一个方法:

/*
......
//*/

只要把开始的
/* 前面加一个字符 /,就可以去掉注释,
否则就是注释了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-07-21 16:30 |只看该作者

【八仙过海,各显神通】大家把平时编程时用的技巧,都贴上来吧!

^_^,加精吧,技巧篇。

flw老大的不错啊。呵呵,有个性,不失可读性和易用性。

论坛徽章:
0
7 [报告]
发表于 2004-07-21 16:43 |只看该作者

【八仙过海,各显神通】大家把平时编程时用的技巧,都贴上来吧!

我倒是建议,注释就是注释,不要玩弄什么技巧。
注释可以采用一些文档生成工具的定义方式,以方便生成帮助文档。
例如doxygen 工具就被许多开源软件所使用。
定义的基本方法也很简单如:
行前注释就是
  1. /// 下面是×××处理代码
  2. yourcode();
复制代码

行后注释就是
  1. yourcode(); ///< 这里放行后注释信息。
复制代码

文件注释就是
  1. /**
  2. * @file      CommCppLibBool.h
  3. * @brief     CommCppLib 定义BOOL类型
  4. * @version   0.0.1      
  5. * @date      2004/06/01
  6. * @author    (C) 2004-2005 by Xiaoyuer
  7. * @email     windflowers1976@msn.com                                      
  8. */
  9. /***************************************************************************
  10. *                                                                         *
  11. *   This program is free software; you can redistribute it and/or modify  *
  12. *   it under the terms of the GNU General Public License as published by  *
  13. *   the Free Software Foundation; either version 2 of the License, or     *
  14. *   (at your option) any later version.                                   *
  15. *                                                                         *
  16. ***************************************************************************/
复制代码

论坛徽章:
0
8 [报告]
发表于 2004-07-21 16:50 |只看该作者

【八仙过海,各显神通】大家把平时编程时用的技巧,都贴上来吧!

flw的方法确实不错。呵呵

我也共享一个,从boost里面学来的。

#define LINK(a,b)  DOLINK(a,b)
#define DOLINK(a,b)  a##b


经过两次宏展开以后,如果a或者b本身是一个宏,那么LINK也能处理这种情况:

例如:
LINK(12, __LINE__)

展开后是1222,而不是12__LINE__

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2004-07-21 16:53 |只看该作者

【八仙过海,各显神通】大家把平时编程时用的技巧,都贴上来吧!

你没明白我们在说什么。
我们说的不是普通的注释,而是注释掉代码。

就是说,在开发或者调试的过程当中,有一段代码需要频繁地屏蔽掉、又打开、又屏蔽掉,所以呢,当然是要编辑起来省事才好。

如果是很长很长的代码短的话,行注释方式固然不行,就算是段落注释,
也存在问题,也就是说,你需要把光标挪到需要操作的代码的前、后两处,分别编辑才可。岂不甚烦?用我这个方法,只需要编辑一个地方,这对于 telnet 用户来讲,还能节省很多时间呢!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2004-07-21 17:23 |只看该作者

【八仙过海,各显神通】大家把平时编程时用的技巧,都贴上来吧!

原帖由 "converse" 发表:
宏的运用还有更绝的,看看<<c语言接口与实现>;>;里的吧:


  1. #define TRY do { \
  2.         volatile int Except_flag; \
  3.         Except_Frame Except_frame; \
  4.         Except_frame.prev = Except_stack; \
  5.         Except_stack = &Except_frame;  \
  6.         Except_flag = setjmp(Except_frame.env); \
  7.         if (Except_flag == Except_entered) {
  8. #define EXCEPT(e) \
  9.                 if (Except_flag == Except_entered) Except_stack = Except_stack->;prev; \
  10.         } else if (Except_frame.exception == &(e)) { \
  11.                 Except_flag = Except_handled;
  12. #define ELSE \
  13.                 if (Except_flag == Except_entered) Except_stack = Except_stack->;prev; \
  14.         } else { \
  15.                 Except_flag = Except_handled;
  16. #define FINALLY \
  17.                 if (Except_flag == Except_entered) Except_stack = Except_stack->;prev; \
  18.         } { \
  19.                 if (Except_flag == Except_entered) \
  20.                         Except_flag = Except_finalized;
  21. #define END_TRY \
  22.                 if (Except_flag == Except_entered) Except_stack = Except_stack->;prev; \
  23.                 } if (Except_flag == Except_raised) RERAISE; \
  24. } while (0)
复制代码


这里太复杂,具体要看书才能看得比较清楚,我当时看了一个晚上才看懂,作者用这个宏实现了类似于c++的异常处理功能,实在令人惊叹!

而且在宏里使用的do {}while(0)技巧同样值得注意,比如说我们定义了一个宏如下:

  1. #define swap(x,y) {int temp = x; x = y; y = temp;}
复制代码

可是在用到这个宏的时候,我们经常这么用
  1. swap(x,y);
复制代码
,注意后面的;号,在把宏展开的时候就会出问题,可是如果我们这么写,就可以避免这个问题了:

  1. #define swap(x,y) \
  2. do {int temp = x; x = y; y = temp;} while(0)
复制代码


原来那个帖子我已经封了,大家就在这里回复吧!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP