C语言的补充(预处理)。。。。

15 篇文章 0 订阅
7 篇文章 1 订阅

九、本来打算写枚举的,算了,直接看菜鸟教程吧。。。

https://www.runoob.com/cprogramming/c-enum.html

十、C语言的预处理:

所谓的预处理就是进行编译的第一遍扫描(语法分析)之前所做的工作;
C的预处理功能有:
宏定义:#define
文件包含:#include "stdio.h"或#include <stdio.h>
条件编译:#if、#endif、#ifndef、#else、#endif
#:预处理命令标记
define 、if、endif等为宏命令
1.宏定义:#define
宏定义只是简单的替换、不占用内存,在预处理的时候就被处理掉了,不是声明也不是语句,不用加分号。
#define LISTEN NB//这个定义告诉编译器所有的Listen将替换为NB
带参数的宏定义,模拟函数:
#define MAX(x,y) (((a)>(b))?(a):(b))
注意:宏的定义可以是大写也可以小写,一般情况用大写,便于阅读和理解。

2.文件包含:#include "stdio.h"或#include <stdio.h>
<>:表示在系统头文件目录中查找;
“”:表示先在当前目录中查找,等找不到了再去系统头文件目录中查找;

3.条件编译:#if、#endif、#ifndef、#else、#endif
有时候一个工程不止有.c文件,还有头文件,此时我们要定义头文件(ds1302):

#ifndef __DS1302_H//意思是如果没有定义ds1302这个文件
#define __DS1302_H//那就定义ds1302这个文件
.....//打代码。。。
#endif//呼应前面的#ifndef

#ifdef
。代码一。。。
#else
。代码二。。。
#endif
这个跟if elsed 语句一样,如果标识符已经被#define定义过,则编译代码一的内容;
如果没有就编译代码二

#ifndef
。代码一。。。
#else
。代码二。。。
#endif
这个上面的意思相反,如果标识符没有被#define定义过,则编译代码一的内容;
否则就编译代码二

4.宏延续运算符(\)
一个宏通常写在一个单行上。但是如果宏太长,一个单行容纳不下,则使用宏延续运算符(\)。例如:
如:

#include <stdio.h>
#define  message_for(a, b)  \
    printf(#a " and " #b ": I love listen!\n")
int main(void)
{
   message_for(BB, MM);
   return 0;
}

在这里插入图片描述
这里用到了#:
在宏定义中,当需要把一个宏的参数转换为字符串常量时,则使用字符串常量化运算符(#)。

标记粘贴运算符(##):宏定义内的标记粘贴运算符(##)会合并两个参数

#include <stdio.h>
#define listenpaster(n) printf ("listen" #n " = %d", listen##n)
int main(void)
{
   int listen_01 = 100;
   
   listenpaster(_01);//输入了_01->n
   return 0;
}

在这里插入图片描述

5.C语言的一些常用宏:
DATE 当前日期,一个以 “MMM DD YYYY” 格式表示的字符常量。
TIME 当前时间,一个以 “HH:MM:SS” 格式表示的字符常量。
FILE 这会包含当前文件名,一个字符串常量。
LINE 这会包含当前行号,一个十进制常量。
STDC 当编译器以 ANSI 标准编译时,则定义为 1。

#include <stdio.h>
int main()
{
   printf("File :%s\n", __FILE__ );
   printf("Date :%s\n", __DATE__ );
   printf("Time :%s\n", __TIME__ );
   printf("Line :%d\n", __LINE__ );
   printf("ANSI :%d\n", __STDC__ );
   
   return 0;
}

在这里插入图片描述

//本次素材部分来自菜鸟教程和网络。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值