关于《0 bug C/C++商用工程之道》的一点说明
我这两天在CSDN论坛开了一个散分贴,想宣传一下我的书。大多数朋友还是很友好的,对我的支持和鼓励很多,我也很感激。
网址在这里:http://topic.csdn.net/u/20091216/22/5a6594be-21e6-459e-ab41-57755273f465.html
当然,也有朋友认为肖某人吹牛,说0bug不可能,并且隐隐有PK的意思,我呢没办法,写了个说明。
这里想了一下,也在这里share出来,大家看看,如果觉得肖某人有诚意呢,给个好,诚意还不够呢,继续探讨。
呵呵,还是那句话,一家之言,欢迎拍砖哈。
原文就不摘录了,太长,这个问题的起源呢,是我书目录中有个提法,建议不要用do...while()语句,因为有潜在的bug风险,当然,一部分朋友就此开始论战,举出各种例子来证明肖某人胡说,甚至还设置一些程序陷阱,来故意制作bug,以证明不用do...while()语句,就不可以写出程序。
最后没办法,我回了个长文,这里贴给大家看。
嗯,刚才哄娃睡觉呢,没空想问题。
现在想了一下,我发现我被你绕进去了。
do...while()是典型的循环语句,被你用作宏包容器了。
嗯,我的无错化程序设计原则里面有一条,严禁一语多义。
这个呢,有两层意思:
1、不要在同一行写太多代码。阅读的人无法理解。
2、不要故意耍技巧,把A含义的语句故意写成B含义。
无错化的含义,主要就是写人阅读无障碍的程序,好的程序,从易读开始。
因此,do...while()用作宏包容器本身,不会在我的程序里面出现的。我会回避这种写法。
一语多义,由于给阅读者误导太过于严重,一般严禁这种书写方法。这是减少程序bug的关键。
因此,不管你怎么举例子,我只能说,我会按照我的方法写程序。
C语言太灵活,用法太多,不约束一下,确实不好控制bug。
很多时候程序bug,是由于程序员理解有误造成的。在公司里面,我们的代码通常写完后,还有后续的其他维护者,因此,一般说来应该写易读的程序,才会减少bug的。
也许以前很多前辈的代码,用到了很多C的花样和技巧,也能编译通过,也对。
但是,我想我不会用。因为我怕bug。
因此,这里我说句话,请各位坛友了解一下:
我书里面介绍了我的一些实战方法,来减少bug,但这并不绝对。
首先,这不是唯一正解,大家完全可以自行寻找自己的正解,想偷点懒,省点事呢,直接看我的书也可以。不看也无所谓,并不是说,离了我的书就写不出程序的。
其次呢,C和C++语言灵活性太大,一种算法,可以说有一万种写法,我的原则很简单,每种解法,只要一套方
相关文档:
#include <stdio.h>
#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0
//打印输入中单词长度的水平方向直方图,
void main()
{
int c, i, nc, state;
int len; //length of each bar
int maxvalue; &n ......
简单的函数调用,通过简单的函数调用反汇编可以清楚了解如下
1.栈到底是什么,如何操纵栈的?
2.参数和临时变量是以什么形式在哪存放?
3.如何传递返回值?
举例:
#include <stdio.h>
int add(int a,int b)
{
int c=0;
c=a+b;
  ......
1.scanf格式符 p9
ld long
lf double
2.三字母词 p22
为了表示一些特殊的字符,在老式的机器键盘中可能没有的字符,特别约定了一种三字母词,三字母词都以??开始,如下:
??( &nb ......
Visual C++中的C运行时库浅析(lib dll)
一、历史
C运行时库就是C run-time library,诞生于20世纪70年代,是C而非C++语言世界的概念,C程序运行时需要这些库中的函数。
C语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等)。所以,C语言内核开发出来之后, ......
//yichi的c代码编写规范:091216
//一、常量:
// 所有宏定义、枚举常数和const变量全部由大写字母构成,词与词之间用下划线分开,例如#define GPS_WORK_STATUS 0x30
//二、变量:
// 局部变量全部由小写字母构成,词与词之间用下划线分开,例如uint8 ack_delay_time[4];全局变量与局部变量 ......