一个 关于 c 语法疑惑 ,出自mwc飞控

qq_18497859 2015-11-12 11:07:44
#define ASSERT_CONCAT_(a, b) a##b
#define ASSERT_CONCAT(a, b) ASSERT_CONCAT_(a, b)
#define ct_assert(e) enum { ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(e)) }

最后一句看不懂是什么意思
...全文
557 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
李伯特 2017-08-20
  • 打赏
  • 举报
回复
__LINE__是编译器内部规定的,在编译过程提供。
qq_18497859 2015-11-16
  • 打赏
  • 举报
回复
谢谢你的回复,看了有种恍然大悟感觉,不过这里还有点不懂1/(!!(e)是怎么计算的
Arslan_batu 2015-11-12
  • 打赏
  • 举报
回复
展开宏: ct_assert(e) enum { ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(e)) } 等于: ct_assert(e) enum { assert_line___LINE__) = 1/(!!(e)) } __LINE__就是当前代码行号,假设为10,所以这就是定义一个enum量,其中 如果e == 0: ct_assert(0) => assert_line_10 = INF.000 如果e != 0: ct_assert(0) => assert_line_10 = 1
Arslan_batu 2015-11-12
  • 打赏
  • 举报
回复
引用 1 楼 jungweiht 的回复:
展开宏: ct_assert(e) enum { ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(e)) } 等于: ct_assert(e) enum { assert_line___LINE__) = 1/(!!(e)) } __LINE__就是当前代码行号,假设为10,所以这就是定义一个enum量,其中 如果e == 0: ct_assert(0) => assert_line_10 = INF.000 如果e != 0: ct_assert(0) => assert_line_10 = 1
写错。。 如果e == 0: ct_assert(e) => assert_line_10 = INF.000 如果e != 0: ct_assert(e) => assert_line_10 = 1

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧