Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1301221
  • 博文数量: 548
  • 博客积分: 7597
  • 博客等级: 少将
  • 技术积分: 4224
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-15 13:21
个人简介

嵌入式软件工程师&&太极拳

文章分类

全部博文(548)

文章存档

2014年(10)

2013年(76)

2012年(175)

2011年(287)

分类: LINUX

2011-03-06 20:38:56

  1. ===============
  2. 预处理
  3. ===============
  4. 一、"#define" & "#include"两种预处理的比较:
  5.     "#define"命令定义一个符号常量A,则在预处理时将程序中所有的A都置换为指定的字符串;
  6.         且它不是C语言本身的组成部分,所以它的末尾不需加分号;
  7.         它仅只做简单的置换,不作正确性检查;只有在编译阶段才会检查宏展开后的内容正确性,且不分配内存空间;
  8.         它的作用范围从定义开始到文件结束;也可以用"undef"来提前结束;
  9.         在宏定义中可以引用已定义的宏名;
  10.         带参数的宏定义中每个参数最后都加括号,且宏名与参数间不应加空格.
  11.         宏替换不占运行时间,只占编译时间,且使用宏次数越多,宏展开后源程序变的越长.

  12.     "#include"命令包含一个文件"stdio.h",则在预处理时将stdio.h文件中的实际内容代替該命令;
  13.         它是在预处理后将头文件stdio.h包含到主文件中合成一个新的源文件,然后再一起进行编译和链接.
  14.         文件包含是可以嵌套的.
  15.         <>""是前者是在存放C库函数头文件的目录中寻找要包含的文件,这也是标准方式;后者系统会先在用户当前目录中查找要包含的文件,若找不到,再按标准方式查找.

  16. 二、预处理功能:
  17.     1:宏定义        eg:#define PI 3.1415
  18.     2:文件包含    eg:#include <stdio.h>
  19.     3:条件编译    eg:ifdef DEBUG/.../endif:即如果在某条语句前有"#define DEBUG"则会执行...内容,否则不会执行.
  20.              if DEBUG/..../else/.../endif:如果在前面#define DEBUG 1(为真)则会执行.


  21. ==============
  22. 共用体union
  23. ==============
  24. 一、定义:
  25.     ---几个不同的变量共占同一段内存的结构,称为“共用体”。

  26. 二、共用体 & 结构体
  27.     "结构体":结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自已的内存单元。
  28.     "共用体":共用体变量所占的内存长度等于最长的成员的长度。只有先定义了共用体变量才能使用它,而且不能引用共用体变量,而只能引用共用体变量中的成员。

  29.     注:
  30.      1、同一个内存段可以用来存放几种不同类型的成员,但每一瞬时只有一个成员起作用,其它的成员不起作用,即不是同时都存在和起作用。
  31.      2、共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。
  32.      3、共用体变量的地址和它的成员的地址都是同一地址。
  33.      4、不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,又不能在定义共用体变量时对它初始化。
  34.      5、不能把共用体变量作为函数参数, 也不能使函数带回共用体变量,但可以使用共用体变量的指针。
  35.      6、共用体类型可以出现在结构体类型定义中,也可以定义共用体数组;反之,结构体也可以出现在共用体类型定义中,数组也可以作为共用体的成员。



  36. ==============
  37. 联合体enum
  38. ==============
  39. 一、定义
  40.     ---如果一个变量只有几种可能的值,则可以定义为枚举类型;所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
  41.     eg: enum{sun, mon, tue, wed, thu, fri, sat}workday, week_end;
  42.     
  43.     注:
  44.      1、在C编译中,对枚举元素按常量处理,故称枚举常量。它们不是变量,不能对它们赋值:eg:sum = 0; mon = 1;(这是错误的)
  45.      2、枚举元素作为常量,它们是有值的,C语言编译按定义时的顺序使它们的值为0,1,2......;其实在上面的定义中:sun的值为0, mon的值为1...其实这个值是可以用printf("%d",sum);打印出来的。
  46.      3、枚举值是可以用来作判断比较的。
  47.      4、一个整数不能直接赋值给一个枚举变量。


  48. ==============
  49. typedef
  50. ==============
  51. 一、定义
  52.     ---除了可以用C提供的标准类型名定义,还可以用typedef声明新的类型名来代替已有的类型名。eg: typedef int INT(INT就表示int型)
  53.     typedef struct{
  54.         int month;
  55.         int day;
  56.     }DATE;
  57.     现就可以:
  58.     DATA *p;    //p为指向此结构体类型数据的指针


  59.     注:
  60.      1、typedef可以声明各种类型名,但不能用来定义变量。
  61.      2、typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。
  62.      3、typedef int COUNT;    //是在编译时处理的。它并不是简单的字符串替换

  63.      #define COUNT int;    //是在预编译时处理的,它只能做简单的字符串替换

  64.      4、当不同源文件中用到同一类型的数据时,常用typedef声明一些数据类型,把它们单独放在一个文件中,然后在需要用到它们的文件中用#include命令把它们包含进来。
  65.      5、使用typedef有利于程序的通用与移植。
阅读(1081) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~