源码来自 newlib-cygwin
其中有以下一段宏:
#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
for ((var) = SLIST_FIRST((head)); \
(var) && ((tvar) = SLIST_NEXT((var), field), 1); \
(var) = (tvar))
其目的是通过这个宏实现安全遍历链表,可以在遍历的时候删除链表元素。其中 for 循环中的表达式 2 中的目的是当 var 非空的时候就执行后面的赋值 tvar ,若 var 为空执行后面的 SLIST_NEXT 会导致崩溃。我对这里就很不解了,首先这个表达式我没见过,后面一个 1 是什么操作?其次在遍历到最后一个元素的时候 tvar 必然会等于空而跳出循环,但是实际运行得很好。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.