加入收藏 | 设为首页 | 会员中心 | 我要投稿 梅州站长网 (https://www.0753zz.cn/)- 行业物联网、云备份、数据工具、云计算、智能推荐!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

C语言中的“六大陷阱”

发布时间:2021-05-05 17:44:20 所属栏目:传媒 来源:互联网
导读:见过这样的代码(*(void(*)())0)();,你能知道这是上面意思吗? 看不懂不用担心,下面我们来分析一下:任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符(declarator)。声明符从表面上看鱼表发挥有些类似,对他就只应该返回一个声明给定的结果。

见过这样的代码“(*(void(*)())0)();”,你能知道这是上面意思吗?

看不懂不用担心,下面我们来分析一下:任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符(declarator)。声明符从表面上看鱼表发挥有些类似,对他就只应该返回一个声明给定的结果。(void (*)()0)是将常数0 转型为“指向返回值为void 的函数的指针”类型。而(*(void(*)())0)();就可以看成是一个函数调用,末尾的分号使得表达式成为一个语句。当然我们也可以使用typedef来世表达式更加清晰:语句结束符的分号问题

C语言以分号“;”,作为语句结束的标志,那么如果在表达式后多写了分号,会出现什么结果呢?这个分号也许会被视作一个不会产生任何实际效果的空语句,或者编译器会因为这个多余的分号产生一条警告信息,可以根据警告信息去掉这个分号。但一个例外就是在if 或者while语句之后多写一个分号,此时原来在if或者while之后的语句即使一条单独的语句,鱼条件判断没有了任何关系。请看一下代码: 函数调用

与其他程序设计语言不同,C语言要求:在函数调用时及时函数不带参数,也应该包含参数列表,因此,如果f 是一个函数,f();一个函数调用,而f;却是一个什么也不做的语句。

6. else 悬挂问题

我们经常听到说else要和if 配对使用,然而在我们写代码时,还是会经常出错,例如如下代码:

(编辑:梅州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读