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

原创 2015年11月19日 18:49:30

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 修饰函数  可以在其他文件中使用。(外部函数)默认

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


【黑马程序员】C语言学习笔记之预处理指令(十四)

--------------------------------------------IOS期待与您交流!-------------------------------------------- 一...
  • kqygww
  • kqygww
  • 2014年03月17日 12:02
  • 826

程序设计与C语言学习笔记_第十章编译预处理与位运算

第10章 编译预处理与位运算 编译预处理,是指源程序被正式编译之前所进行的处理工作。由预处理程序实现,负责分析和处理行首以‘#’开头的控制行,包括宏代换、文件包含和条件编译。 10.1 宏定义 ...

C语言学习笔记之预处理篇

1.c语言的预处理功能:宏定义、文件包含、条件编译等。 2.C语言中允许用一个标识符来表示一串符号,称为宏,被定义为宏的标识符称为宏名 3.系统自定义的宏:  =============...

C语言深度剖析学习笔记-预处理

预处理

【黑马程序员】C语言学习笔记(3)-预处理指令

C语言源程序在进行编译、链接之前会进行检测是否有一些特殊的预处理指令,若检测一些特殊的预处理指令则会进行相应的处理。C语言中多有的预处理指令都以符号“#”开头,并且结尾不使用分号。预处理指令在程序中出...

黑马程序员-----c语言学习笔记之预处理指令、函数、变量

一.预处理指令: 1.所有预处理指令都是以“#”开头 2.预处理指令分为三种 (1)宏定义: 1>不带参数的宏 需注意的是所有的宏名都是大写或者以字母“K"开头 例: #define COUNT 4 ...

C语言预处理指令学习笔记

==========================================================================================         ...
  • Vic_Wan
  • Vic_Wan
  • 2016年04月19日 22:14
  • 131

IOS学习---C语言基础学习7(预处理指令)

预处理指令: 所有的预处理指令都是以#开头 代码翻译成0和1之前执行的指令 1、宏定义 2、条件编译 3、文件包含 预处理指令的位置是随便写的,但是预处理指令是有作用域的 一、宏...

c语言学习笔记7之基本运算符

当我们有1之后就会产生2,继而产生之后的一些数字,由此产生了加减乘除的运算,c语言中的运算也包括这些,而且还产生了一些运算的变体。 1.算数运算 1)+、-、* 2)/、% 整数相除,取整数部分。...

sqlite学习笔记7:C语言中使用sqlite之打开数据库

数据库的基本内容前面都已经说得差不多了,接下看看怎样在C语言中使用
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习笔记7-C语言预处理
举报原因:
原因补充:

(最多只允许输入30个字)