0
点赞
收藏
分享

微信扫一扫

补充C语言03:预处理

代码小姐 2022-03-31 阅读 94
c语言

程序翻译的过程

预处理,编译,  汇编,链接

其中预处理包括:

 头文件的展开, 宏替换,去注释,条件编译

预处理

1.0用宏定义充当注释符号

2.0用 define 宏定义表达式

- else匹配if时,直接报错了

最完美的解决方案

该宏最大的特征是,替换的不是单个变量/符号/表达式,而是多行代码
其实,带上花括号也行,但是没有这样做好

3.0宏定义中的空格

 在#define和符号之间是可以有空格的(第七行),但是尽量不要这样写

4.0#undef

undef的本质作用


5.0条件编译

条件编译能通过**裁剪代码**,快速实现版本维护(free,收费),功能裁剪,跨平台性等等

演示#ifdef

在#ifdef中如果定义该符号,就执行

演示#ifndef

在#ifndef中如果没有定义该符号,就执行

多条件的情况

 #if判断的是真假

其他样例

#if defined也是支持嵌套的

6.0头文件的展开

关于解决头文件被重复包含的解决方案


条件编译来解决头文件被重复包含的问题,不仅限于此

7.0#error 预处理

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h> 
//#define __cplusplus 
int main() 
{
	#ifndef __cplusplus 
	#error 老铁,你用的不是C++的编译器哦 
	#endif
	return 0; 
}

8.0#line 预处理

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h> 
int main() 
{ 
	//C预定义符号,代表当前文件名和代码行号 
	printf("%s, %d\n", __FILE__, __LINE__); 
#line 60 "hehe.h" //定制化完成
	printf("%s, %d\n", __FILE__, __LINE__); 
	return 0; 
}
#line定制化文件名称和代码行号

9.0#pragma 预处理

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h> 
#define M 10 
int main() 
{
	#ifdef M 
	#pragma message("M宏已经被定义了") //下发
	#endif
	return 0; 
}
#pragma message()作用:
可以用来进行对代码中特定的符号(比如其他宏定义)进行是否存在进行编译时消息提醒
但是我在vs2019中演示不出来,感兴趣的可以试试

10.0# 运算符

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h> 
#include <string.h>
#define TOSTRING(s) #s
int main() 
{
	int abc = 12345;
	char str[64] = { 0 };
	strcpy(str, TOSTRING(abc));
	printf("%s", str);
	return 0; 
}
将参数符号s对应的文本内容,转换成为"字符串"

11.0## 预算符

3.14e3是指数的科学计数法,这个运算符会将##相连的符号和合成一个新的字符,
举报

相关推荐

0 条评论