【C语言零基础入门篇 - 8】:预处理之文件包含

预处理之文件包含

预处理之宏定义

在这里插入图片描述


预处理 - 无参宏

宏定义,又称为宏替换,自定义一个宏(要符合标识符的命名规则),用于替换任意数据、标识符或者表达式。

无参宏定义

定义无参宏的基本格式:#define 宏名 宏替换

注意:不能给宏定义的常量赋值

注意:预处理做替换是没有计算功能的,宏名约定俗称都是大写

在这里插入图片描述

  • 优点:一改全改
    在这里插入图片描述
    在这里插入图片描述

带参数宏定义

带参宏定义
定义带参宏的基本格式:#define 宏名(参数表) 宏替换

注意:
宏定义是替换,其在替换完成前并不会计算。
宏定义尽量用大写,使其在程序中容易辨别区分。

在这里插入图片描述

宏定义的优缺点

优点:

  • 方便程序修改
  • 提高程序的运行效率:使用带参函数可完成部分函数调用的功能,既减少了系统开销,又提高了运行效率。

缺点:

  • 缺少检测机制(缺少检测机制是因为在预处理过程中不会去判断语法错误,只有在程序编译时才会去判断语法错误)

预处理之文件包含

文件包含的基本格式:

包含系统头文件用<>,只会在系统头文件中找 

包含自定义头文件用"",在自定义头文件中找不到就会在系统头文件中找

注意:文件包含允许嵌套,即在一个被包含文件中可以包含其它文件。

演示过程:

头文件的嵌套包含可能会引起头文件的重复包含,从而出现函数重定义,而宏定义语句可以防止头文件重复包含。

#pragma once 是一种预处理指令,用于确保头文件只被编译一次,以防止重复包含。

  • 我们先创建一个头文件tool1.h,并在文件中写入内容
    在这里插入图片描述

  • 并在文件包含.c文件中导入使用
    在这里插入图片描述

  • 我们再创建一个tool2.h的头文件,并写入内容

  • 注意:因为tool1.h中已包含了#include<stdio.h>,所以在tool2.h中就不用再写入,可直接使用printf()
    在这里插入图片描述

  • 这时再在文件包含.c中运行,发现报错
    在这里插入图片描述

  • 错误的原因是因为头文件重定义
    在这里插入图片描述

  • 解决办法:在程序上方加上:#pragma once ,防止头文件被重复包含
    在这里插入图片描述
    在这里插入图片描述

  • 重新运行文件包含.c中的程序
    在这里插入图片描述

预处理之条件编译

1、#if……#else的使用

#if 表达式
  代码段1;

#else
	代码段2;

#endif
 //判断表达式的逻辑值(真或假),若逻辑值为真
 //则编译代码段1,否则编译代码段2,与if……else的使用方法类似

2、#ifdef……#endif

①格式一:

#ifdef 宏名
	代码段;
#endif
//如果定义了宏"宏名",则编译代码段

②格式二:

#ifdef 宏名
	代码段1;
#else
	代码段2;
#endif
//如果定义了宏"宏名",则编译代码段1,否则编译代码段2;

3、#ifndef……#endif

①格式一:

#ifndef 宏名
	代码段;
#endif
//如果没有定义宏"宏名",则编译代码段

②格式二:

#ifndef 宏名
	代码段1;
#else
	代码段2;
#endif
//如果没有定义宏"宏名",则编译代码段1,否则编译代码段2;

举例

#include<stdio.h>
#define FLAG 0

int main()
{
	char name[20] = "abcABCdef";
	int x = 0;
	while (name[x] != '\0')
	{
#ifdef FLAG
		if (name[x] >= 'a' && name[x] <= 'z')
		{
			name[x] = name[x] - ('a' - 'A');
		}
#else
		if (name[x] >= 'A' && name[x] <= 'Z')
		{
			name[x] = name[x] + ('a' - 'A');
		}
#endif
		x++;
	}
	puts(name);
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

街 三 仔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值