c语言——预处理详解

前言:我们用到过#define,与#include指令,这些指令都是由预处理器处理的。预处理器是一个小软件,它可以在编译前处理c程序

目录

一. 预定义符号

二. #define 

1.#define定义标识符

2. #define定义宏

3. #

4. ##


一. 预定义符号

这些预定义符号都是语言内置的

实例:

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

 

二. #define 

1.#define定义标识符

语法:
             标识符    内容
    #define   name    stuff

例子: 

#define MAX 1000
#define reg register          //为 register这个关键字,创建一个简短的名字

#define do_forever for(;;)     //用更形象的符号来替换一种实现

#define CASE break;case        //在写case语句的时候自动把 break写上。

// 如果定义的 stuff过长,可以分成几行写,除了最后一行外,每行的后面都加一个反斜杠(续行符)。

#define DEBUG_PRINT printf("file:%s\tline:%d\t \

                          date:%s\ttime:%s\n" ,\

                          __FILE__,__LINE__ ,       \

                          __DATE__,__TIME__ )   

2. #define定义宏

#define机制包括了一个规定,允许把参数替换到文本中,这种实现通常成为宏(macro)或定义宏(define macro)

宏的申明方式:

#define name(parament-list) stuff
//其中parament-list是参数列表,参数可以被替换到文本中去

注意: 

参数列表的左括号必须与name相邻,如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分

3. #

首先我们看这样一段代码

#include<stdio.h>
int main()
{
	printf("hello " "world\n");
	return 0;
}

 这里输出的是 hell world,所以字符串是有自动连接的特点的


使用#,可以把一个宏参数变成对应的字符串

#include<stdio.h>
#define PRINT(FORMAT,VALUE)\
       printf("the value of "#VALUE" is "FORMAT"\n",VALUE);
     //即为"the value of ""VALUE"" is "FORMAT"\n"
int main()
{
	int i = 3;
	PRINT("%d", i);
	return 0;
}

代码中的#VALUE会被预处理为:"VALUE"

最终输出的结果是:

the value of i is 3

4. ##

##可以把位于它两边的符号合成一个符号

#include<stdio.h>
#define CAT(v,n) v##n
int main()
{
	int value10 = 100;
	printf("%d", CAT(value, 10));//value##10,##把两边的符号合成一个符号,即value10
	return 0;
}

运行结果:

100

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

  ᶘ ᵒᴥᵒᶅ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值