源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

奇怪的C语言特性

  • 时间:2021-01-03 12:40 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:奇怪的C语言特性
下面列出的特性未必奇怪,有的算是有趣。 1)a[2] 等价于 2[a] "aabbccdd"[5] 等价于 5["aabbccdd"] 这条特性可以用于使用数组、指针、字符串,但不能用在变量定义时。K&R C Programming language 217页对此有介绍。 2)二元、三元复合字符 [url=http://en.wikipedia.org/wiki/Digraphs_and_trigraphs]http://en.wikipedia.org/wiki/Digraphs_and_trigraphs[/url] 字符串字面值??!将被认为是|,所以两个问号同时出现在字符串的时候一定要小心。二元复合字符在C99被引入,如<:等价于[ 3)Duff's Device [url=http://en.wikipedia.org/wiki/Duff%27s_device]http://en.wikipedia.org/wiki/Duff%27s_device[/url] 特点是switch与while交错出现。代码类似 [img]http://files.jb51.net/file_images/article/201304/201304111431566.png[/img] 4)同名同姓现象 [img]http://files.jb51.net/file_images/article/201304/201304111431567.png[/img] 在《C陷阱与缺陷》中有详细解释。 [b]5)a[i++]= i;[/b] 这个好像是依赖特定编译器实现,我在Xcode实验结果为先对a[i]赋值i,然后操作i++。此类代码一定要小心。如果你在做code review发现++ –出现在其它表达式中或者作为参数出现,一定要立刻马上把它移出来作为单独语句,小心驶得万年船。 [b]6)sizeof[/b] sizeof(x), x可以是一个表达式或者类型名,如果是表达式,不做运算,int x = 1; size_t sz = sizeof(x++); X不会增加。T *p = NULL; p = malloc(sizeof *p); p并没有提领,K&R圣书也有讲。 sizeof unary-expr; sizeof(typename);一元表达式可以没有括号,圣书里面语法部分提到。如size_t f = sizeof 99; [b]7)宏定义要小心[/b] 例如:[url=http://twitter.com/search?q=%23define]#define[/url] FOO(a,b) (a+b)/(1-a)如果这样调用FOO(bar++,4),自增两次,当然,把宏展开就非常清楚了。 参考资料: [url=http://www.steike.com/code/useless/evil-c/]http://www.steike.com/code/useless/evil-c/[/url] 《C陷阱与缺陷》
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部