Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1769921
  • 博文数量: 290
  • 博客积分: 10653
  • 博客等级: 上将
  • 技术积分: 3178
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 23:08
文章存档

2013年(6)

2012年(15)

2011年(25)

2010年(86)

2009年(52)

2008年(66)

2007年(40)

分类: C/C++

2007-11-02 11:52:14

在分析linux的/source/include/linux/types.h头文件时,见大多都是预处理与类型定义语句,由于是刚开始分析内核,大多自定义类型并不清楚,但知道这个语句是什么后,等以后慢慢了解后在去了解其含义.
  也顺便对C语言的知识点复习下:
 
一:预处理
 

     定义:预处理是有一组命令组成的,由于这些命令是在程序正常编译之前被执行而得名.

  特点:

      在编译前执行,即执行该命令后再进行正常的编译.

     命令左边加#号字符作为该命令的标志.

     预处理命令不是语句,使用时不加:号结束标志.

     预处理命令可以放在程序中的任何位置,无论是开头,中间,还是结尾.

  写法:

     一般单独占一行,如果写成多行,要加续行符.('\')

  类型:1:宏定义命令

   a:简单宏定义

         定义:用来将一个标识符定义为一个字符串,该标识符称为宏名,被定义的字符串称为宏名,字符串叫替换文本

       格式: #define <宏名>   <字符串>

      执行:将其程序中出现的宏名用被定义的字符串替换,即宏替换,不做语法检查

   b:带参数的宏定义

      定义:指在宏名后面跟有参数表.

       格式: #define  (x,x,x,)    <宏体>

      执行:只替换宏体中与参数表中相同的标识符,即用实参代替形参.如:

           #define ADD(x,y)   (x)+(y) //定义

           s=ADD(5,8); //程序中的语句

         被替换后:s=5+8 //5,8是实参,定义中的(X)(Y)是形参

       通常在宏体的定义中为形参加上括号,这样可以避免宏替换所出现的二义性.

 取消宏定义:

  #undef <宏名> name用来指出希望取消的已定义的宏名.

 寿命:即作用域-从定义时开始,到被取消时终止.如果没被取消,到此文件结束为止.

二:   文件包含命令
 
      作用:
     用来将一个已有的文件的全部内容插入到程序的某个位置已备使用.
     格式:#include   <文件名>  //用于系统所提供的并存放在指定的子目录中的头文件
            "文件名"  //用于用户自定义的头文件或其他源文件
                      如:#include  
    注意事项:
      1.一条文件命令只包含一个头文件,如过需要包含多个文件必须用过个文件包含命令.
      2.定义的被包含文件中还可以使用文件包含命令.文件包含命令可以嵌套使用.
      3.为使编译后的目标文件代码精简,在定义被包含文件的时候文件应该尽量短小.必要时候可定义多个包含文件.
 
     
三:   条件编译命令
 

    作用:用来定义某些编译内容要在满足一定条件的时候在参与编译的程序段,否则不参与编译.一般将条件编译命令用在以下两种情况.

     1.使同一个源程序在不同的编译条件下产生不同的目标代码.

     2.利用条件编译在调试程序的时候增加一些调试语句,实现目标跟踪.

   常用的的编辑命令格式:
      格式一:
          #ifdef   <标识符>//用#ifndef替换后是另外一种格式
 
                         <程序段1>
 
                 #else
 
                         <程序段2>
 
                 #endif
              当else缺省时候成为以下格式
 
          #ifdef  <标识符>  //#ifndef
                 
                         <程序段>
                
                 #endif
      说明:当标识符被定义时,程序1参与编译,否则程序2参与编译.
 
      格式二:
 
          #if   <常量表达式>
 
             <程序段1>
 
          #else
 
                      <程序段2>
 
          #endif
           
            说明:当<常量表达式>的值为非零时,<程序段1>一参与编译,否则<程序段2>参与编译.
 
 
 

四: 类型定义

     定义:是指对现在已经有的类型起个别名作为一种新类型.

     优点:

       1.简化类型的书写.长名变短名.

       2.给名字增加一些新信息.//如: int a; typedef  int WIDTH

            3.增加类型的安全性.用类型定义定义变量时,要进行类型检查.

     定义新类型的方法:

        typedef  <已有类型名>     <新类型名表>

           类型定义可以嵌套,即可以用已经定义的类型再来定义类型.

      如:

        typedef   double   length

             typedef    length  *point

             point p1,p2;

          这里p1,p2是指向DOUBLE型变量的指针.而所指向的变量是用来表示长度的.

阅读(3542) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~