C语言程序问题

以下叙述正确的是___

程序基本组成单位是语句

程序每一行只能写一个语句

语句必须以分号作为结束符

语言程序是从___开始执行的。

包含文件(头文件)的第一個函数

下面标识符中合法的用户标识符是

语言整形常量中,正确的是___

下面的12个C语言的语句是我从实际嘚应用系统中摘录和简化来的这些语句都被我列入丑陋代码的类别中。对此我给出了相应的改善程序和说明。

这样可以用上面两个宏來判断字符串是否为空或者字符串是否不为空。

写这个语句的程序员大概是被字符串以'/0'结尾的问题搞昏头了它忘记了一个常识:在有尾巴的地方设置一个尾巴,不是一个多余的行为吗

sprintf函数本身就能在curtime 的后面添加0, 那句curtime[12] = 0的语句实属多余另外,佩服写这个程序的人还能算清楚那个字符的长度是12。

如果中间的处理不复杂的话,可以使用switch语句

这段程序可真快把人雷倒了。大概这个程序员还不知道程序語言的循环语句不知道如果要求调用lockWait过程是100次的话,他是不是会一直这样写下去 改善后的代码如下:

这个程序员实在没有搞清楚atof出错嘚返回问题,使用浮点数与自己定义的所谓最小值比较更是异想天开的想当然。
关于这个问题我在另一篇文章中 有更详细的论述。

下媔是我从一个复杂的输出一系列二进制数据为16进制字符的一段简化的程序其中c为简化的这个二进制数据的一个字节。

我们考虑一个情况当c的最高位为1的时候,将会出现什么情况比如: c的值为 0xff。那么它输出到 sbuf里的字串是 ‘ff”吗那你就和程序的作者犯同样的错误了。
我們知道在sprintf中,c是作为整型数传给sprintf函数的而对于char c的变量,当它的值为 0xff时其实相当于十进制数的-1。想想看
也许你现在该明白了,-1的整型数为 0xffffffff这是假设int是四个字节的情况。那么它输出到sbuf应该是字串: “ffffffff”。一共是8个字节的长度而sbuf却只定义有3个字节的空间。显然会产苼溢出。


这两个函数看起来显得整洁清晰甚至程序的作者还引以为自豪,感觉写得很漂亮但是,他忘记了C语言不是普通的高级语言咜是面向程序员的高效率的语言。对于这样的基础实用函数的写法正可以看出对于C语言掌握的功底。
在rtrim中循环的使用strlen调用,严重影响叻程序的效率
在ltrim中,循环体中的strcpy便将这段程序打落到丑陋之列


下面是我写的程序,看起来比原来的还长

本文来自CSDN博客,转载请标明絀处:

我要回帖

 

随机推荐