【C语言高级操作】之蓦然回首那人却在灯火阑珊处
2023-12-29 20:31:20
1.表达式
warning: #174-D: expression has no effect
字面意思表达式无效,恭喜你写了一个自认为对,但没有实际效果的bug
比如我写的
#define MDL_ADS112U04_AUTO_READ(port, recbuf) \
do \
{ \
uint16_t usLen = WkUartRxChars(port, recbuf); \
usLen; \
} while (0)
报错原因是本意是想用uslen来充当函数返回值,但实际没有达到目的。正确做法如果你也这么认为那和笔者犯了同样错误
这种问题只会提示waring,不会提示error,论看waring重要性
#define MDL_ADS112U04_AUTO_READ(port, recbuf) \
( do \
{ \
uint16_t usLen = WkUartRxChars(port, recbuf); \
usLen; \
} while (0))
bug1:do {}while(0) 大括号内的作用域作用不到小括号
bug2 : while(0)后面少分号
正确做法吐了,能不能编过还的看编译器
#define MDL_ADS112U04_AUTO_READ(port, recbuf) \
( do \
{ \
uint16_t usLen = WkUartRxChars(port, recbuf); \
usLen; \
} while (0);)
ARM compiler 和 GCC 不一样,very good
回顾以前博客链接我终于找到点蛛丝马迹
参考GNU C 扩展 表达式
括在括号中的复合语句可能显示为表达式 在 GNU C 中。这允许您使用循环、开关和局部变量 在表达式中。
回想一下,复合语句是一系列被包围的语句 通过大括号;在此构造中,括号围绕大括号。为 例:
({ int y = foo (); int z;
if (y > 0) z = y;
else z = - y;
z; })
是一个有效的(尽管比必要的稍微复杂一些)表达式 对于 的绝对值
如果就想用GNU C 代码规范 直接百度就有
文章来源:https://blog.csdn.net/qq_44704780/article/details/135267445
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!