关闭

学习笔记7-C语言预处理

124人阅读 评论(0) 收藏 举报

1     typedef使用

简单说就是给已存在的数据类型起别名。

形式

typedef 原类型名 新类型名;

 

1)typedef与基本数据类型

typedef int  INT;

定义之后 INT就可以代替int 使用。

2)typedef与数组

typedef int ARRRY[5];

ARRRY arr; //等效于 int a[5];

3)typedef与结构体

struct Person{

         int age ;

         char *name[20];

};

typedef  struct PersonP;

P 的作用等效 struct Person

 

定义结构体的时候起别名。

typedef struct Car{

        成员变量列表;

}CAR;

匿名结构体起别名

typedef struct {

        成员变量列表;

}CAR;

 

3)typedef与枚举

类似结构体

typedef enum Color{ } COLOR;

4)typedef 与函数指针

int (*p)(int,int);

typedef int (*F)(int,int);

F p;   //等效于int (*p)(int,int)

 

2     预处理指令

 

在c语言中,以 # 开头的命令。 include  define和条件编译。

 

1) 有参宏

#define 宏名 宏值(可以是常量、变量和表达式)

宏替换

编译之前把宏替换为宏值。完全替换不会添加或减少其他字符。

 

       注意

       宏名一般大写

       宏定义不是语句,末尾无分号

       宏定义必须写在函数之外,作用域从定义开始到程序末尾或者取消宏定义的地方。

#undef 宏名

 

2) 有参宏

#define 宏名(形参表) 字符串

 

#define SUM(a)  a+a

#define SUM(x,y)  x*y+x+y

#define SUM(x)   x*y+x+y  //使用时需要提前定义y

 

         注意

宏替换时会把宏带入,同时会把参数的值带入

宏名和参数之间不能有空格。

形参不分配内存单元不需要定义类型。只是符号代换。

         参数最好用小括号括起来。

     

        举例使用有参宏求两个数最大

                #defineMAX(a,b)  a>b?a:b

3) typedef 和define区别

都可以起别名

#define INT int *

typedef int *  INTER

宏使用的时候只是展开

INT a ,b ;//等效 int * a ,b;

INTER a ,b ;//等效与 int *a ;int* b;

 

4) 条件编译

根据不同的条件编译不同的程序部分,产生不同的目标文件。

条件编译指令

#if 常量表达式

        程序段1

        #elif

程序段2

#endif


条件编译&代码调试打印日志

#ifdef 宏名

        代码段

#else

        代码段

#endif

检测是否定义了宏名

DEBUG这个宏系统已经定义 默认值为1

 

设置显示调试信息的宏

#define  DEBUG== 1 

        #Log(format,…) printf(format,##__VA_ARGS__); //format 为形参 …表示参数可以为1个或者多个。##表示可以为0个参数。

#else

        #Log(format,…);

#endif

 

3     static和extern

 

static 和extern 都可以修饰变量。

        static修饰的变量,内部变量,只有包含变量定义的源代码的文件都可以访问

        extern修饰的变量,外部变量,所有的文件都可以访问,只要有声明就行。

 

static对局部变量作用: 延长局部的生命周期,但是没有改变作用域。变量不销毁

                                    变量的声明只在第一次调用时执行。

extern 不能修饰局部变量。

 

static对全局变量的作用:全局变量只能在当前文件中使用。(内部变量)

extern 对全局变量的作用:可以在除自身文件之外的文件中使用。(外部变量)

                                            与其他文件中的全局变量不能同名。

                                           全局变量默认为外部变量。

static修饰函数   自能在自身文件中访问 (内部函数)

extern 修饰函数  可以在其他文件中使用。(外部函数)默认

可以通过调用外部函数,外部函数调用内部函数,实现不同文件之间的函数调用。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3323次
    • 积分:191
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章存档