周游C语言教程17 - 预处理

周游C语言教程17 - 预处理

这是周游C语言的第十七篇教程,你将在这篇文章里认识预处理操作。

预处理

预处理的意思是在进行编译之前的操作,前文写过的define就是预处理的一种。预处理器都是用#开头,并且必须在一行的开头。

include

#include可以用来包含其他源文件。

#include 
#include "your_header.h"

上述代码中第一行将告诉编译器去系统库中查找《stdio.h》文件,第二行代码将告诉编译器去本地路径中查找《your_header.h》文件。

undef

define定义的宏取消定义。

#define A 1
#undef A
#define A 2

此时A为2,而不再是1。

ifdef、ifndef、endif

这三个指令可以让编译器选择性进行编译。#ifdef表示如果定义了某个宏定义则编译下方直至#endif处的代码。#ifndef表示如果没有定义了某个宏定义则编译下方直至#endif处的代码

#include 

#define A 1
int main()
{
#ifdef A
	printf("%d\n",A);
#endif
#ifndef B
	printf("no B defined");
#endif
	return 0;
}

运行上述代码可以看见两句printf都被打印,而把#define A 1改成#define B 1,则上述代码不会输出任何语句。

if、else、elif、endif

这几个指令和if语法相同,当给定条件为真时则编译相关代码。

#include 

#define A 1
int main()
{
#if A == 1
	printf("defined A is 1\n");
#elif A == 2
	printf("defined A is 2\n");
#else
	printf("A每被定义或A不等于1或A不等于2\n");
#endif
	return 0;
}

这里改变A的值会改变输出的值。使用条件编译和使用if代码的区别是使用条件编译,不符合条件的不会被编译进程序,而if会把所有的代码都编译进去,程序运行时改变入口条件随时可以进入其他代码分支。

error

使用#error可以让编译器报错,通常和条件编译一起使用

#include 

#ifndef A
#error "宏定义A未被定义"
#endif
int main()
{

	printf("defined A is %d\n",A);

	return 0;
}

以上代码编译器会报错,错误提示为“宏定义A未被定义”

program

program 后面需要跟着特殊命令,和编译器相关

预定义宏

以下这些宏会在编译器编译时自动定义

宏名 描述
__DATE__ 程序被编译的日期,既编译时的日期,一个以 “MMM DD YYYY” 格式表示的字符常量。
__TIME__ 程序被编译的时间,既编译时的时间,一个以 “HH:MM:SS” 格式表示的字符常量。
__FILE__ 这会包含当前文件名,一个字符串常量。
__LINE__ 这会包含当前行号,一个十进制常量。
#include 

main()
{
	printf("File :%s\n", __FILE__);
	printf("Date :%s\n", __DATE__);
	printf("Time :%s\n", __TIME__);
	printf("Line :%d\n", __LINE__);
}

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