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

2019-12-10 18:26发布

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

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

好像有点强迫症,但个人感觉,同样的东西,要写出更好的代码还是不能马马虎虎,if else死扛到底
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
93条回答
tim
1楼-- · 2019-12-11 21:26
 精彩回答 2  元偷偷看……
zhd1021
2楼-- · 2019-12-11 21:45
之前写的SIM800的AT驱动,状态机,AT队列,非阻塞,无系统。
自我感觉不错,大佬勿喷

  1. typedef void (*gsmAtFunctionHandler)(unsigned char * par,unsigned short len);

  2. typedef struct
  3. {
  4.     ATType gsmAtFunctionCode;
  5.     gsmAtFunctionHandler AtHandler;
  6.     unsigned char *str;
  7. } AtFunctionHandler;

  8. static AtFunctionHandler AtHandlers[MaxAtCount] = {
  9.     {AT_ATE, At_FunctionAte, (unsigned char *)"ATE0 "},
  10.     {AT_CPIN, At_FunctionCpin, (unsigned char *)"AT+CPIN? "}
  11.     .
  12.     .
  13.     .
  14. };

  15. void At_FunctionCpin(unsigned char *par, unsigned short len)
  16. {
  17.     if (At_CheckResult(par, len) == At_OK)
  18.     {
  19.         AtStatusChange(AT_CREG, 1000);
  20.     }
  21.     else if (At_CheckResult(atStatus.AtRevBuffer, atStatus.AtRevBufferLength) == At_ERR)
  22.     {
  23.         atStatus.AtCmd = AtWiteSend;
  24.     }
  25. }
  26. .
  27. .
  28. .
  29. void UartRecvData()
  30. {
  31.     for (i = 0; i < MaxAtCount; i++)
  32.     {
  33.         if (AtHandlers[i].gsmAtFunctionCode == atStatus.AtNow && atStatus.AtCmd == AtWiteRev)
  34.         {
  35.             AtHandlers[i].AtHandler(BufferStartAddr, packlenght);
  36.             break;
  37.         }
  38.     }
  39. }
复制代码
su33691
3楼-- · 2019-12-11 23:34
能完美处理“临界变量”的代码就是好代码。
vtte
4楼-- · 2019-12-12 01:31
可以多看看Linux内核代码
lswood
5楼-- · 2019-12-12 05:54
判断一个整数是否是2的n次方 if (0 ==  a & (a-1) )
minier
6楼-- · 2019-12-12 08:36
 精彩回答 2  元偷偷看……

一周热门 更多>