预处理命令

又名预编译---正式编译前的预备工作

hello.c

gcc hello.c    //gcc编译

a.out

编译:object

预处理阶段:

凡是预处理命令 都是以#开头的

#include<stdio.h>

#if 0

...

#endif

三大块内容:

1.宏定义

2.文件包含

3.条件编译

1.宏定义

语法:

用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为

#define 标识符 字符串

#define 宏名 宏值

//用宏名代表了这个宏值//宏值,本身其实一串文字字符

说明:

1.宏名一般建议大小,区别于普通变量名

2.宏名命名方法与变量名命名方法一致

3.预处理阶段,做的事情--

文本的原样替换(用宏值对应本文字符串,替换代码中宏名)

a.语法-define 后面不能写分号

b.代码中,""括起来的字符串中的与宏名相同的字符不会被替换

#define N 10

printf("N = %d\n",N);

          (1)             (2)//第(1)个N不会被替换,第(2)个会被替换

c.使用宏的好处

一改全改//提高代码灵活性

提高代码的可读性

4.宏名---名字---标识符

只想要部分替换:#define宏名 数值(从这开始)

                               ...

                              #undef  宏名(从这结束)

如果没有用#undef取消宏名的定义,那么默认作用范围,是从#define那行开始一直作用到结尾

5.注意,宏定义,必须都在同一行

6.如果宏定义要写成多行,那么需要使用续航符(\)注意:续航符(\)每一行都要 写上去,包括{\

...\

}后面就不用写续航符了

带参宏:

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

#define 宏名(参数表)宏值

宏函数//注意:本质不是函数

区别:

1.带参宏---预处理阶段就处理完成了做文本的远洋替换,不需要做语法检查

2.函数---是编译阶段要编译成最终机器代码的,所以函数需要做语法检查

//使用上

3.带参宏---每用一次,代码中就会多一份带参宏对应的宏值

4.函数调用---函数对应代码之后一份

//参数上

5.带参宏---本身做的是文本的替换,不会检查类型

6.函数---需要做形参类型的检查

注意:宏定义时,能加括号的地方尽量都加上,避免宏的副作用

 文件包含

#include<文件名>

#include"文件名"//作用:将文件中的内容,包含到最终的.c文件中

#include<stdio.h>//如果是<>默认直接到系统默认的路径下去寻找指定的头文件

                           //如果是""默认先到当前目录下寻找指定的头文件,如果没有,才到系统默认路径                               下寻找

条件编译:

//形式1:

#ifdef 标识符

      程序段1

#else

     程序段2

#endif

     return 0;

(相当于if-else语句)

或者

#ifdef  标识符

      程序段1

#endif

//形式2

#ifndef 标识符

      程序段1

#else

       程序段2

#endif

//形式3

#if 表达式

        程序段1

#else

        程序段2

#endif

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值