c语言——预处理详解

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

c语言——预处理详解_第1张图片

目录

一. 预定义符号

二. #define 

1.#define定义标识符

2. #define定义宏

3. #

4. ##


一. 预定义符号

c语言——预处理详解_第2张图片

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

实例:

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

 c语言——预处理详解_第3张图片

二. #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
int main()
{
	printf("hello " "world\n");
	return 0;
}

c语言——预处理详解_第4张图片

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


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

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

运行结果:

100

你可能感兴趣的:(c语言,开发语言)