搜索
bottom↓
回复: 93

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

  [复制链接]

出0入0汤圆

发表于 2019-5-13 16:24:17 | 显示全部楼层 |阅读模式
看了一份代码,几乎所有地方能用if else就用if else,于是我突然想到了三个问题:
在一个有实际意义的应用需求驱动之下(而不是像C混沌大赛那种装逼场景下)

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

好像有点强迫症,但个人感觉,同样的东西,要写出更好的代码还是不能马马虎虎,if else死扛到底

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2019-5-13 16:35:25 | 显示全部楼层
条件多了,偶一般用switch

出0入93汤圆

发表于 2019-5-13 16:36:47 | 显示全部楼层
一行什么样的代码,可以说明你是一般水平的C码农?

出0入93汤圆

发表于 2019-5-13 16:36:48 | 显示全部楼层
万一人家是从LUA转过来的暂时转变不了思想呢,还不就是if...else死扛到底

出0入93汤圆

发表于 2019-5-13 16:38:23 | 显示全部楼层
tim 发表于 2019-5-13 16:36
一行什么样的代码,可以说明你是一般水平的C码农?

  1. label: goto label;
复制代码

出5入42汤圆

发表于 2019-5-13 16:39:28 | 显示全部楼层
本帖最后由 kevin_me 于 2019-5-13 16:40 编辑

能用就行,只要没有bug,管那么多干嘛

——我对写的很好的代码和人,我还是很敬畏的。

出0入34汤圆

发表于 2019-5-13 16:39:33 | 显示全部楼层
我属于低级水平, 还要随时翻书找句法

出0入93汤圆

发表于 2019-5-13 16:43:37 | 显示全部楼层
  1. while(1){}
复制代码
算什么水平?

出0入0汤圆

发表于 2019-5-13 16:46:26 | 显示全部楼层
之前写的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\r\n\0"},
  10.     {AT_CPIN, At_FunctionCpin, (unsigned char *)"AT+CPIN?\r\n\0"}
  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. }
复制代码

出0入0汤圆

发表于 2019-5-13 16:49:28 | 显示全部楼层
能完美处理“临界变量”的代码就是好代码。

出0入33汤圆

发表于 2019-5-13 16:52:22 | 显示全部楼层
可以多看看Linux内核代码

出0入25汤圆

发表于 2019-5-13 16:52:39 来自手机 | 显示全部楼层
判断一个整数是否是2的n次方 if (0 ==  a & (a-1) )

出0入0汤圆

发表于 2019-5-13 16:52:43 | 显示全部楼层
这个命题,大佬也很难找到非常准确的语言和示例精炼的回答

出0入93汤圆

发表于 2019-5-13 16:53:57 | 显示全部楼层

算苦逼的单片机码农水平

出0入98汤圆

发表于 2019-5-13 16:55:31 | 显示全部楼层
每年都有那个什么最难读懂的C语言编程大赛
那些人都玩出花来了
真的是

人生苦短,我用python

出0入0汤圆

发表于 2019-5-13 16:58:40 | 显示全部楼层
((StructType*)buffer)->Child == 0 ? return 1 :return 0

出150入640汤圆

发表于 2019-5-13 16:59:00 | 显示全部楼层
计算机二级水平,鉴定完毕

出0入0汤圆

发表于 2019-5-13 17:02:49 | 显示全部楼层
人生苦短, 不写代码

出0入0汤圆

发表于 2019-5-13 17:06:26 | 显示全部楼层
只会if else,也想花里胡哨

出0入0汤圆

发表于 2019-5-13 17:10:45 | 显示全部楼层
程式跑的順,使用者用的爽,老闆願意給錢,產品賣得掉
就是好碼

出0入4汤圆

发表于 2019-5-13 17:14:53 | 显示全部楼层
满足需求的简单代码就是好代码

出0入0汤圆

发表于 2019-5-13 17:31:07 | 显示全部楼层
能if else解决的的绝不麻烦。

出0入0汤圆

发表于 2019-5-13 17:37:24 来自手机 | 显示全部楼层
lswood 发表于 2019-5-13 16:52
判断一个整数是否是2的n次方 if (0 ==  a & (a-1) )

没毛病呀 嘿简洁呢

出0入0汤圆

发表于 2019-5-13 18:03:40 来自手机 | 显示全部楼层
能挣钱的代码就是好代码。有些事写这玩意的时候,还要边翻书边写呢。但这并不妨碍别人挣钱。

出0入296汤圆

发表于 2019-5-13 18:08:37 来自手机 | 显示全部楼层
用if else有啥错么?这要看平台以及编译器的。我记得在avr环境下,用IAR,用if else比用switch 尺寸要小一点。在arm环境下,如果指令集中没有TBB或者TBH,也是if else跟switch 没太大差别,甚至更优化一些。

出0入4汤圆

发表于 2019-5-13 18:09:11 | 显示全部楼层
过一段时间自已还能看懂自己写的代码的原意就是好代码。

出0入0汤圆

发表于 2019-5-13 18:10:52 来自手机 | 显示全部楼层
你写的再好也不如人家写安卓写IOS的工资高呀

出0入0汤圆

发表于 2019-5-13 18:11:02 | 显示全部楼层
装逼推荐:函数指针数组,通过下标直接执行

出0入296汤圆

发表于 2019-5-13 18:12:12 来自手机 | 显示全部楼层
本帖最后由 Gorgon_Meducer 于 2019-5-13 18:13 编辑

另外,我有点奇怪,楼主的问题更像是要给别人“上一课”。我想说,如果自己不了解C语言各种写法在实际工程环境下的优劣和适用范围,还是不要为了“装逼而装逼了”。C语言一点都不博大精深,他只是个不那么好用的思维翻译工具,真正博大精深的还是程序员自己的思维方式。请不要在错误的路上越走越远。程序员何苦为难程序员。

出0入0汤圆

发表于 2019-5-13 18:13:05 | 显示全部楼层
su33691 发表于 2019-5-13 16:49
能完美处理“临界变量”的代码就是好代码。

+1, 我觉得除了架构之外,最难处理的就是临界变量,我发现很多人没有这种意识,只是按照正常的方法使用,产品没问题,要是专门进行严格的测试,不按常理出牌,我看到过的在产品上跑的代码很多会有问题。

出0入0汤圆

 楼主| 发表于 2019-5-13 18:15:26 | 显示全部楼层
Gorgon_Meducer 发表于 2019-5-13 18:12
另外,我有点奇怪,楼主的问题更像是要给别人“上一课”。我想说,如果自己不了解C语言各种写法在实际工程 ...

这个问题能够把傻孩子炸出来,也算是差不多了
其实我觉得自己更像是陷入某种迷茫:
究竟在coder的过程中,那种想把代码稍微再写好点的强迫症,应该控制到哪一种程度
这是一种想把代码不要写得自己都觉得是一份垃圾代码
同时有觉得自己对C语言的认知其实还处于垃圾水平
的矛盾

出0入0汤圆

发表于 2019-5-13 18:17:23 | 显示全部楼层
Gorgon_Meducer 发表于 2019-5-13 18:12
另外,我有点奇怪,楼主的问题更像是要给别人“上一课”。我想说,如果自己不了解C语言各种写法在实际工程 ...

把您老给骗进来了

出0入0汤圆

 楼主| 发表于 2019-5-13 18:21:48 | 显示全部楼层
Xplain 发表于 2019-5-13 18:13
+1, 我觉得除了架构之外,最难处理的就是临界变量,我发现很多人没有这种意识,只是按照正常的方法使用 ...

我觉得自己在Coder过程中,对C或者软件的优化技巧基本没有什么可以进步的地方
不是因为自己懂,而是因为我在Coder的时候,只能使用自己已经掌握的方法和思路去写代码
说白了就是闭门造车再写10年也只会一直都在那个鸟水平,不会有实质性的大进步

反而

我觉得自己对软件优化和好坏方面的判断,都是来自平时抽空看论坛的讨论,某些大牛的帖子,或者某些示例代码得来的

出0入296汤圆

发表于 2019-5-13 18:21:53 | 显示全部楼层
qq335702318 发表于 2019-5-13 18:15
这个问题能够把傻孩子炸出来,也算是差不多了
其实我觉得自己更像是陷入某种迷茫: ...

放弃这种形式主义的迷茫比较好。好的代码更在乎的是如何准确的翻译你的思维,如何在性能和尺寸之间根据应用需求做出正确的取舍。如何让合作的人更好的跟你合作。增加代码可读性恐怕比“高大上”更有意义。我用C语言因为我觉得我能准确的表达我的想法,换个语言我就没这个信心了。

出0入296汤圆

发表于 2019-5-13 18:22:51 | 显示全部楼层
prince2010 发表于 2019-5-13 18:17
把您老给骗进来了

坐在马桶上……

出0入37汤圆

发表于 2019-5-13 18:26:54 | 显示全部楼层
lswood 发表于 2019-5-13 16:52
判断一个整数是否是2的n次方 if (0 ==  a & (a-1) )

这个不是搞电子的得晕菜

出0入37汤圆

发表于 2019-5-13 18:27:57 | 显示全部楼层
c的复杂不在语法,而在于数据结构,在于对内存的管理能力。

出0入0汤圆

发表于 2019-5-13 18:28:52 来自手机 | 显示全部楼层
c语言才是最好的程序语言。

出0入22汤圆

发表于 2019-5-13 18:29:12 来自手机 | 显示全部楼层
我也觉得,可维护性比其他都重要,除非代码写了就是一锤子买卖,以后都不管了。另外,对性能没有要求的地方,一般不会用太难看懂的写法。

出0入25汤圆

发表于 2019-5-13 18:37:28 | 显示全部楼层
下一页 发表于 2019-5-13 18:26
这个不是搞电子的得晕菜

这是我在泄漏的windows 2000内核源代码里看到的

出0入8汤圆

发表于 2019-5-13 19:00:59 来自手机 | 显示全部楼层
当你开始考虑用户的需求而不是编译器需求的时候,你就不会纠结这些问题了。

出0入0汤圆

发表于 2019-5-13 20:08:32 | 显示全部楼层
初学编程的时候,老师说能让人一眼就看明白的程序(通俗易懂)就是好程序。

出50入10汤圆

发表于 2019-5-13 20:14:40 | 显示全部楼层
deedeezi 发表于 2019-5-13 20:08
初学编程的时候,老师说能让人一眼就看明白的程序(通俗易懂)就是好程序。 ...

有些人写代码就是为了让人看不懂!

出0入8汤圆

发表于 2019-5-13 20:50:17 | 显示全部楼层
书籍的顺序差不多就反映了水平,基本数据类型,控制语句,数组结构,算法,人工智能。你的水平决定了C语言的上限。

出0入0汤圆

发表于 2019-5-13 20:53:59 | 显示全部楼层
zhd1021 发表于 2019-5-13 16:46
之前写的SIM800的AT驱动,状态机,AT队列,非阻塞,无系统。
自我感觉不错,大佬勿喷
...

这个只实现了AT命令的字符串匹配跳转到对应的处理函数,还有应答什么的要做。感觉AT指令的代码很不好写,没规律,格式也比较随意。不知道有没有好的AT处理代码借鉴下

出0入0汤圆

发表于 2019-5-13 21:27:31 | 显示全部楼层
可读性。

出0入8汤圆

发表于 2019-5-13 22:48:45 | 显示全部楼层
把LINUX源码看完,月薪上万轻轻松松

出0入8汤圆

发表于 2019-5-13 23:04:48 来自手机 | 显示全部楼层
hellowolf 发表于 2019-5-13 22:48
把LINUX源码看完,月薪上万轻轻松松

我觉得看完任何一个RTOS就够了

出0入0汤圆

发表于 2019-5-13 23:07:21 来自手机 | 显示全部楼层
su33691 发表于 2019-5-13 16:49
能完美处理“临界变量”的代码就是好代码。

+1         

出0入0汤圆

发表于 2019-5-13 23:19:03 | 显示全部楼层

高手,懂汇编。

出0入0汤圆

发表于 2019-5-13 23:28:27 | 显示全部楼层
zhd1021 发表于 2019-5-13 16:46
之前写的SIM800的AT驱动,状态机,AT队列,非阻塞,无系统。
自我感觉不错,大佬勿喷
...

这个状态机还是很不错的。 我一直对AT方式的指令处理比较好奇,有个代码看看,也算是有参考思路了。

出0入0汤圆

发表于 2019-5-13 23:48:22 来自手机 | 显示全部楼层
本帖最后由 XA144F 于 2019-5-13 23:51 编辑

(*(int (*)(int,int,int))(0x20040000))(a,b,c);

出0入0汤圆

发表于 2019-5-14 00:30:54 | 显示全部楼层
感觉还是看写出来的功能效率之类的,说白了还是看能写出来什么东西,毕竟语言本身并没有什么不一样。

出0入0汤圆

发表于 2019-5-14 07:49:56 来自手机 | 显示全部楼层
本帖最后由 cht-rtos 于 2019-5-14 07:51 编辑

代码风格简洁,逻辑清晰就挺好了,那些技巧之类的不是必须。

出0入0汤圆

发表于 2019-5-14 07:52:05 来自手机 | 显示全部楼层
lswood 发表于 2019-5-13 16:52
判断一个整数是否是2的n次方 if (0 ==  a & (a-1) )

用心了,,,,,

出0入0汤圆

发表于 2019-5-14 08:19:34 来自手机 | 显示全部楼层
C是砖头,算法加数据结构才是最终的目的,能做出好

出0入0汤圆

发表于 2019-5-14 08:20:22 来自手机 | 显示全部楼层
C是砖头,能做出好的算法加数据结构,就是好猫

出0入0汤圆

发表于 2019-5-14 08:46:20 | 显示全部楼层
别人能看懂的代码就是好代码,水平有限

出0入0汤圆

发表于 2019-5-14 08:52:12 | 显示全部楼层
qq854149876 发表于 2019-5-13 20:53
这个只实现了AT命令的字符串匹配跳转到对应的处理函数,还有应答什么的要做。感觉AT指令的代码很不好写, ...

当然,代码只贴了部分

出10入46汤圆

发表于 2019-5-14 09:03:19 | 显示全部楼层
1. 编译速度快
2. 0-9编译都能通过

99%都是好代码

最主要,要能看懂

出0入0汤圆

发表于 2019-5-14 10:23:00 | 显示全部楼层
python是世界上最好的语言

出130入20汤圆

发表于 2019-5-14 10:28:51 | 显示全部楼层
1. 稳定
2. 自己和别人可维护

就是好代码。哪怕if else到底

出0入0汤圆

发表于 2019-5-14 10:47:20 来自手机 | 显示全部楼层
Gorgon_Meducer 发表于 2019-5-13 18:22
坐在马桶上……

好久不见,有种时空错乱的感觉^_^

出0入0汤圆

发表于 2019-5-14 10:48:44 | 显示全部楼层
本帖最后由 1826772880 于 2019-5-14 11:04 编辑
lswood 发表于 2019-5-13 16:52
判断一个整数是否是2的n次方 if (0 ==  a & (a-1) )


前一阵还被这个所谓的'与运算效率高"给坑了,经过实验反汇编后 a&(a-1)完全等于a%a。
--------------------------------------
有些不严谨,是x&(a-1)完全等于x%a。a为n的次方

出0入0汤圆

发表于 2019-5-14 10:50:43 | 显示全部楼层
搞不懂那么多人连实验都不做,还都在复制这个理论。都忽略了编译器会优化这个事情

出0入0汤圆

发表于 2019-5-14 10:54:07 | 显示全部楼层
思路清晰,代码简洁,这才是基本

出0入0汤圆

发表于 2019-5-14 17:40:09 | 显示全部楼层
1826772880 发表于 2019-5-14 10:48
前一阵还被这个所谓的'与运算效率高"给坑了,经过实验反汇编后 a&(a-1)完全等于a%a。
---------------- ...

连 a & (a-1) 都搞不清楚,金牌会员怎么来的?

出0入8汤圆

发表于 2019-5-14 18:12:19 来自手机 | 显示全部楼层
1826772880 发表于 2019-5-14 10:48
前一阵还被这个所谓的'与运算效率高"给坑了,经过实验反汇编后 a&(a-1)完全等于a%a。
---------------- ...

照你这么说根本不用判断a是否为2的n次幂
直接返回一个1就行了,因为(a%a) == 0始终成立

出0入0汤圆

发表于 2019-5-14 18:18:33 来自手机 | 显示全部楼层
我想看c语言如何写更装逼,容量更大!

出870入263汤圆

发表于 2019-5-14 19:16:58 | 显示全部楼层
本帖最后由 armstrong 于 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
复制代码

出0入8汤圆

发表于 2019-5-15 08:14:49 | 显示全部楼层
armstrong 发表于 2019-5-14 19:16
我发现这个等式时,是为了解决快速判断用户输入的子网掩码是否合法:

当然还用于确认宏必须是2的n次幂, ...

那个等式因为==优先级高于&会永远等于零。

抄个作业都屌儿郎当的,这样产品靠不住:
if ( 0 ==  (a & (a-1)) )

出870入263汤圆

发表于 2019-5-15 08:34:55 | 显示全部楼层
本帖最后由 armstrong 于 2019-5-15 08:36 编辑
uindex 发表于 2019-5-15 08:14
那个等式因为==优先级高于&会永远等于零。

抄个作业都屌儿郎当的,这样产品靠不住:


是的,他写错了。
我最讨厌舍不得用括号的代码!

出0入8汤圆

发表于 2019-5-15 08:50:18 | 显示全部楼层
armstrong 发表于 2019-5-15 08:34
是的,他写错了。
我最讨厌舍不得用括号的代码!

要赞一下你贴的宏和代码,非常严谨!风格注释也很反映水平!

出0入0汤圆

发表于 2019-5-15 09:07:16 | 显示全部楼层
C语言还是处在开始阶段

出0入0汤圆

发表于 2019-5-15 09:20:00 | 显示全部楼层
uindex 发表于 2019-5-15 08:14
那个等式因为==优先级高于&会永远等于零。

抄个作业都屌儿郎当的,这样产品靠不住:

学习了。

出30入54汤圆

发表于 2019-5-15 10:12:47 | 显示全部楼层
Gorgon_Meducer 发表于 2019-5-13 18:21
放弃这种形式主义的迷茫比较好。好的代码更在乎的是如何准确的翻译你的思维,如何在性能和尺寸之间根据应 ...

强烈同意!!!

出0入300汤圆

发表于 2019-5-15 10:56:20 | 显示全部楼层
C语言的精髓实际上知道的人真不多,但是我知道。C语言的精髓就是连我这种狗屁不懂的也能用

出0入0汤圆

发表于 2019-5-15 11:57:51 | 显示全部楼层
nade 发表于 2019-5-13 17:06
只会if else,也想花里胡哨

if else 跑的小灯 能闪懵你!

出0入0汤圆

发表于 2019-5-15 12:14:12 | 显示全部楼层
楼主想太多了,实际项目中用多了,然后再多读高手写的代码,然后你会"迷茫->明白->迷茫"这样循环几次, 然后就到了一个新水平了

出0入0汤圆

发表于 2019-5-16 13:36:00 | 显示全部楼层
用了什么语法不重要,软件重要的是结构

出0入0汤圆

发表于 2019-5-17 15:33:39 | 显示全部楼层
可以多看看Linux源码加1,然而Linux源码建立在一套完整的系统上(例如互斥安全等),在其他单片机的嵌入式环境只能参考并自己适配移植部分代码。

出0入0汤圆

发表于 2019-5-17 16:11:16 | 显示全部楼层
用面向对象的思维进行编程

出0入0汤圆

发表于 2019-5-17 16:21:39 | 显示全部楼层
Gorgon_Meducer 发表于 2019-5-13 18:12
另外,我有点奇怪,楼主的问题更像是要给别人“上一课”。我想说,如果自己不了解C语言各种写法在实际工程 ...

+1,看别人c代码有时候就是天书,各种a,b,c,d ,l,m,n,s 还都是全局变量 ,查找都没法查找

出0入0汤圆

发表于 2019-5-17 16:32:01 | 显示全部楼层
最近在看上一任同事写的代码,while(1)下面全都是if else,除了看着难受真挑不出什么毛病

出0入0汤圆

发表于 2019-5-17 16:33:24 | 显示全部楼层
蜗牛蜗牛 发表于 2019-5-17 16:21
+1,看别人c代码有时候就是天书,各种a,b,c,d ,l,m,n,s 还都是全局变量 ,查找都没法查找 ...

+1,变量定义真tm简单,搜索一下上千个

出0入0汤圆

发表于 2019-5-27 10:21:01 | 显示全部楼层
看了下,都很厉害。学习了

出0入0汤圆

发表于 2019-6-1 08:49:00 | 显示全部楼层
lswood 发表于 2019-5-13 16:52
判断一个整数是否是2的n次方 if (0 ==  a & (a-1) )

少了一个括号  应该是:if (0 == (a & (a - 1)))

出0入25汤圆

发表于 2019-6-1 12:55:28 | 显示全部楼层
liyang0727 发表于 2019-6-1 08:49
少了一个括号  应该是:if (0 == (a & (a - 1)))

手机输入符号麻烦,知道什么意思就行了。
电脑上码代码从来不吝啬括号、换行、空行和注释

出0入0汤圆

发表于 2019-6-1 13:09:35 | 显示全部楼层
zhd1021 发表于 2019-5-13 16:46
之前写的SIM800的AT驱动,状态机,AT队列,非阻塞,无系统。
自我感觉不错,大佬勿喷
...
  1. {AT_ATE, At_FunctionAte, (unsigned char *)"ATE0\r\n\0"},
复制代码


如果不是有特殊用途的话,字符串字面量末尾手动加 \0 暴露水平,哈哈 (狗头.jpg

出0入0汤圆

发表于 2019-6-1 13:17:41 | 显示全部楼层
wudicgi 发表于 2019-6-1 13:09
如果不是有特殊用途的话,字符串字面量末尾手动加 \0 暴露水平,哈哈 (狗头.jpg
...

需要把这个拷贝到另外一个大数组,如果不加的话,大数组如果之前存在长度超过这个字符串的其他数据,在某些情况下可能出错。这样可以保证拷贝过去之后,这个字符串之后的数据肯定是0

出0入8汤圆

发表于 2019-6-1 18:47:50 来自手机 | 显示全部楼层
C语言是最接近道德经的逻辑思想。万物都是源于道void,空也是万物,自由自在随心所欲。

出0入42汤圆

发表于 2019-6-4 14:58:46 | 显示全部楼层
if(!(a&a-1)) 不是更简洁吗

出0入0汤圆

发表于 2019-6-4 16:34:32 | 显示全部楼层
跟用啥语句,有啥关系?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-4 00:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表