2013年6月16日

C陷阱与缺陷(二)

摘要: 第二章 语法陷阱2.1 理解函数声明(*(void(*)())0)();任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符。一旦我们知道了如何声明一个给定类型的变量,那么该类型的类型转换符只需要添加一个括号即可的到。例如 float (*h)();表示h是一个指向返回值为浮点类型的函数的指针。因此(float (*h)())表示一个"指向返回值为浮点类型的函数的指针"的类型转换符。第一步假设fp是一个函数指针,那么通过(*fp)()调用fp所指向的函数,可以简写问fp()。在表达式(*fp)()中,*fp两侧的括号非常重要,因为函数运算符()的优先级高于单目运算 阅读全文

posted @ 2013-06-16 22:25 颓废的悠然 阅读(281) 评论(0) 推荐(0) 编辑

C陷阱与缺陷(一)

摘要: 第一章 词法陷阱术语“符号”指的是程序的一个基本组成单元,其作用相当于一个句子中的单词。编译器中负责将程序分解为一个一个符号的部分,一般称为“词法分析器”。1.1 =不同于==一般容易将比较运算误写成赋值运算的情形,另一方面,如果把赋值运算误写成比较运算,同样会造成混淆:if((filedesc==open(argv[i],0))<0)error();在本例中,如果函数open执行成功,则返回0或者正数;而如果函数open执行失败,将返回-1。上面这段代码的本意是将函数open的返回值存储在变量filedesc之中,然后通过与0比较来检查函数open是否执行成功。而按照上面的代码是比较o 阅读全文

posted @ 2013-06-16 18:02 颓废的悠然 阅读(396) 评论(0) 推荐(0) 编辑

导航