设为首页 加入收藏

TOP

C语言拾遗(二)
2014-03-10 13:05:05 来源: 作者: 【 】 浏览:324
Tags:语言 拾遗

 

  在ISO C90中,在定义一个类似于柔性数组(在C90标准中还没有柔性数组的概念)的结构体成员的时候,contents[]在定义的时候需要定义成这样:contents[0],其中的0是必须的。

  在ISO C99中,可以直接在结构体中定义一个自由数组成员,自由数组的语法如下:

  自由数组成员的长度为0,在定义一个数组的个数的时候,[]中的0不被包括。

  自由数组成员是不完全类型,所以对结构体使用sizeof操作符时不会包括自由数组成员的大小

  在一个自由数组前必须定义至少一个成员,不能在一个结构体中只定义一个自由数组。

  一个结构体如果包含了一个自由数组,或者在一个联合中包含了这种结构体,那么这种结构体或者联合不能成为结构体的成员或者是一个数组的成员。

  4. 在解析表达式时的贪心法则

  对于这样一个表达式:

  a+++b

  到底表示的是什么呢?是a+ (++b)还是(a++) +b 这个就需要考虑C语言在语法分析的时候是以什么方式解析的。

  在C语言的编译器进行语法分析的时候,使用的是贪心法则。也就是说在处理表达式的时候,如果当前的字符可以和前一个字符串组成一个有意义的符号,则继续读入下一个字符,直到无法组成一个有意义的字符。

  也就说对于上述的表达式,在解析到a+后碰到了+,这个时候,由于a++在C语言中是合法的,那么它继续处理下一个+,由于a+++在C语言中是非法的,那么就不把+作为表达式的一部分,也就说上述的表达式就被解析为:(a++) + b.

  5. 预处理

  在编译的时候可以使用的一些指令,用于在编译的时候输出一些有用的信息,便于追踪编译过程,以及控制编译。

  #line    //改变当前的行数和文件名称,基本语法如下:#line number["filename"]

  #error   //编译程序时,如果遇到#error就会产生一个编译错误提示信息,并停止编译。

  编译器在编译过程预定义了一些宏,用于输出一些编译过程的信息:

  _LINE_        //编译器正在编译的行号

  _FILE_           //编译器正在变异的文件名

  _TIME_           //编译的时间

  _STDC_        //判断该文件是不是定义成标准C程序

      

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数组和指针何时等同何时不同? 下一篇typedef 和 #define&nb..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: