前言:我们用到过#define,与#include指令,这些指令都是由预处理器处理的。预处理器是一个小软件,它可以在编译前处理c程序
目录
一. 预定义符号
这些预定义符号都是语言内置的
实例:
#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