你对C语言的认知和感觉如何?

2019-12-10 18:26发布

看了一份代码,几乎所有地方能用if else就用if else,于是我突然想到了三个问题:
在一个有实际意义的应用需求驱动之下(而不是像C混沌大赛那种装逼场景下)

1. 一行什么样的代码,当能完全读懂以后......就可以对一般水平的C码农证明"C语言不是这么简单"
2. 一行什么样的代码,当能自己一次写出来以后没bug运行........就可以对一般水平的C码农证明"C语言其实可以相当巧妙"
3. 一行什么样的代码,当能自己通过某些方法改进后以最优方式实现的时候.....就可以对一般水平的C码农证明"C的博大精深”

好像有点强迫症,但个人感觉,同样的东西,要写出更好的代码还是不能马马虎虎,if else死扛到底
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
93条回答
love_ourdev
2019-12-19 13:06
本帖最后由 love_ourdev 于 2019-5-14 19:19 编辑
lswood 发表于 2019-5-13 16:52
判断一个整数是否是2的n次方 if (0 ==  a & (a-1) )


我发现这个等式时,是为了解决快速判断用户输入的子网掩码是否合法:
  1. ////////////////////////////////////////////////////////////////////////////////
  2. //|          |
  3. //| 函数名称 |: FTK_IsGoodNetmaskIPv4
  4. //| 功能描述 |: 判断给定的IPv4子网掩码是否符合规则
  5. //|          |:
  6. //| 参数列表 |:
  7. //|          |:
  8. //| 返    回 |:
  9. //|          |:
  10. //| 备注信息 |: 子网掩码必须从bit31开始是连续的1,而后是连续的0
  11. //|          |: 255.255.255.0 表示为 0xffffff00
  12. ////////////////////////////////////////////////////////////////////////////////
  13. bool_t FTK_IsGoodNetmaskIPv4(uint32_t mask)
  14. {
  15.   if (mask == 0 || mask == ~0UL) {
  16.     return false;
  17.   }
  18. #if 0
  19.   while (mask) {
  20.     if (!(mask & (1UL << 31))) {
  21.       return false;
  22.     }
  23.     mask <<= 1;
  24.   }
  25. #else
  26.   /*
  27.     设:mask=0b11111111111111111111111100000000
  28.     取反:a0=0b00000000000000000000000011111111
  29.     a0+1必定是2的n次幂!所以((a0+1)&a0)必定为零
  30.   */
  31.   mask = ~mask; /* 取反 */
  32.   if (mask & (mask + 1)) {
  33.     return false;
  34.   }
  35. #endif
  36.   return true;
  37. }
复制代码
当然还用于确认宏必须是2的n次幂,这样用于fifo长度非常快速:
  1. #if ((FIFO_BUF_SIZE < 2) || (FIFO_BUF_SIZE & (FIFO_BUF_SIZE-1)))
  2. #error FIFO_BUF_SIZE必须是2的n次方,且不能为0也不能为1!
  3. #endif
复制代码

一周热门 更多>