C语言从入门到精通第14天(C语言预处理)

news2024/10/7 17:25:57

C语言预处理

  • 预处理概述
  • 宏定义
  • 条件编译

预处理概述

在前面我们已经对C语言的基础语法知识有所了解了,每次进行程序的编写之前,我们会使用#include命令去导入我们的库函数,而这种以#号开头的命令称为预处理命令。

C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等。合理地使用预处理功能编写地程序便于阅读、修改、调试、移植,也有利于模块化程序设计。

这个预处理命令时怎样去运行的呢?首先我们要知道的是我们编译器中的文件中的内容。

在这里插入图片描述

这里显示了我们用的输出输出函数库,当我们导入这个库函数时,程序会自动的进行预处理,将我们这个stdio.h文件中的内容加载到我们的.c文件中。

宏定义

在C语言程序中允许用一个标识符来表示一个字符串,称为”宏“。被定义为“宏”地标识符称为宏名。在编译预处理时对程序中所有出现的“宏名”,都用宏定义中的字符串去进行文本替换,这称为“宏代换”或“宏展开”。

语法为:

#define 标识符 字符串

这里的字符串可以是常量也可以是表达式。

例如:

#define PI 3.14

// 例举一个函数求面积

int main(){
    float r,area;
    printf("please input:");
    scanf("%f",&r);
    
    area = PI * r*r;
    printf("%f",area);

    return 0;
}

这里我们使用的PI,但是程序仍能够给出正确的结果,这就是经过了预处理。在CLion的Terminal下输出命令:gcc -E main.c -o main.i,然后再同一个文件夹下找到我们编译好的main.i文件。

在这里插入图片描述

用记事本打开翻到最下面,可以发现我们的PI变成了3.14,如下:

在这里插入图片描述

条件编译

常用的条件编译指令

条件编译指令说明
#if如果条件为真,则执行相应操作
#elif如果前面条件为假,而该条件为真,则执行相应操作
#else如果前面条件均为假,则执行相应操作
#endif结束相应的条件编译指令
#ifdef如果该宏已经定义,则执行相应操作
#ifndef如果该宏没有定义,则执行相应操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB离散时间信号的实现和时域基本运算(九)

1、实验目的: 1)了解时域离散信号的特点; 2)掌握MATLAB在时域内产生常用离散时间信号的方法; 3)熟悉离散时间信号的时域基本运算; 4)掌握离散时间信号的绘图命令。 2、实验内容&…

开放原子训练营(第三季)RT-Thread Nano学习营一探究竟

前言 不知道从什么时候起,智能设备开始普及到了我们日常生活的方方面面。下班还未到家,热水器就可以调到合适的温度;上班刚进公司,忘关空调也不再是什么烦恼;诸如夜晚的灯光变换,白昼的窗帘适应等更给我们…

eBPF的发展演进---从石器时代到成为神(二)

3. 发展溯源 回顾技术的发展过程,就像观看非洲大草原日出日落一样,宏大的过程让人感动,细节部分引人深思。每天循环不辍,却又每天不同。 BPF的应用早已超越了它最初的设计,但如果要追溯BPF最初的来源,则必…

nginx(七十一)root、alias、index、try_files关系指令再探

一 root、alias、index、try_files辨析 说明: 这个系列很适合前端人员进阶学习 ① 前言回顾 try_files基础知识 配置try_files实现内容重定向 root和alias指令辨析 ​强调: 1) index只能处理以/结尾的请求2) ​index指令有点在location中判断请…

chatGPT账号apikey码-chatGPT 免费APIKEY

ChatGPT API Key免费吗 ChatGPT使用的API密钥可以免费获取,但是其使用可能会受到一些限制。具体而言,根据你所使用的API提供者和服务级别,免费的API密钥可能会受到以下限制: 次数限制:某些API可能会限制您的API调用次…

Centos 磁盘根目录扩容

Centos磁盘根目录扩容 1.扩容前检查 命令: df -Th or df -h 我们要扩张磁盘空间的就是挂载点为:/ (的这个) 2.添加sda磁盘空间查询磁盘 命令: fdisk -l 其实,我们可以将sda的磁盘新增空间分配给处于sda的 / 挂载目录 也可以跨磁盘将sdb(新磁盘…

约瑟夫环的三种解法(循环链表、数组和用数组模拟链表)

目录 前言 一、用循环链表实现 二、用数组实现 三、用数组模拟链表实现 前言 题目描述: 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。 下一个人继续从 1 开始报数。 n-1 轮结束以后,只剩下一个人&am…

dockerfile传参问题和权限问题

dockerfile传参问题和权限问题 一、docker传参 在工作中,使用dockerfile构建镜像的时候,随着业务越来越多,流水线也越来越多,这时候就需要构建一些通用流水线,而通用流水线最大的问题,就是需要传递参数&a…

Linux基础命令和程序部署

Linux基础命令 ls 可以查看当前目录内容ls 后面跟上一个具体路径可以查看指定目录内容ls -l 可以以列表的形式查看,缩写llpwd 查看当前目录的绝对路径cd 切换目录(就是window界面的鼠标双击目录进入动作),cd在切换目录时后面可以…

【教学类-34-05】拼图(彩色图片+圆角凹凸拼图)3*4格子(中班主题《个别化拼图》偏美术)

图片展示: 背景需求: 最近班级孩子得了传染病,来了2位孩子。 我觉得:人少的话,孩子们就有充足的时间去拼那些带有凹凸槽的自制彩色图形拼图。 难点: 1、从直线剪切(方形拼图)转…

Flink Join操作

目录 DataStream API(函数编程) window Join join coGroup interval Join Table API(flink sql) Reguler Join (常规join) inner join left join / right join full join interval join lookup join Window Join INNER/LEFT/RIG…

摄像头录像软件哪款好用?这款就很不错

案例:录屏时怎么录电脑摄像头? 【很多时候我不仅仅需要录制电脑屏幕,还需要在录屏时录入人像,可是我的录屏软件不支持录制人脸。有没有好用的电脑录屏带人脸的屏幕录制工具介绍?】 无论是教学、游戏直播、软件开发、…

HTML + CSS + JS 利用邮编查询 API 实现邮编查询工具

引言 邮政编码是地址信息的重要组成部分,可以帮助快递公司、物流公司等对地址进行快速、准确的识别和派送。因此,邮编查询工具应用在许多业务场景中都有广泛的应用,例如:电商平台、物流公司、金融机构等。通过使用邮编查询 API&a…

fiddler在请求头添加指定信息

下图所示,设置完请求头信息后,点击右上角Actions按钮的Run Filterset now保存信息,即可。

centos7部署FastDFS服务

一、安装需要的相关依赖 yum -y install make cmake gcc gcc-c 因为我的服务器已经安装了gcc,所以略去 使用gcc -v查看版本 yum -y install zip unzip 安装性能事件通知库 yum -y install libevent 安装nginx依赖 yum -y install libevent yum -y install zli…

MITA触摸屏维修WP4053米塔工控机控制屏维修

MITA-TEKNIK米塔触摸屏维修工控机工控屏控制器维修DISPLAY 2COM全系列型号 Mita-Teknik触摸屏维修常见故障:上电无显示,运行报故障,无法与电脑通讯,触摸无反应,触控板破裂,触摸玻璃,上电黑屏&a…

自动化工具 接口自动化测试引擎

一、前言: 1、解决痛点:接口自动化测试用例需要人去开发、去维护。 2、实现第一性原理:根据定义的测试策略自动生成接口测试用例。 二、引擎优势: 1、提升人效:降低传统方式中接口测试开发与维护的工作量。 2、覆盖更…

输电线路在线监拍设备的国网协议对接方案

疫情过后,尤其山东淄博电力建设的发展,电网规模的不断研发,高压远距离架空输电线路日益增多,在复杂地形条件下的电网建设和设备维护工作也越来越多。 如何解决4G模块控制的功耗,和信号传输方面有一套完整的方案。基于合…

【网络安全】红队基础免杀

引言 本文主要介绍“反射型 dll 注入”及“柔性加载”技术。 反射型 dll 注入 为什么需要反射型 dll 注入 常规的 dll 注入代码如下: int main(int argc, char *argv[]) {HANDLE processHandle;PVOID remoteBuffer;wchar_t dllPath[] TEXT("C:\\experime…

从源码全面解析LinkedBlockingQueue的来龙去脉

一、引言 并发编程在互联网技术使用如此广泛,几乎所有的后端技术面试官都要在并发编程的使用和原理方面对小伙伴们进行 360 的刁难。 二、使用 对于阻塞队列,想必大家应该都不陌生,我们这里简单的介绍一下,对于 Java 里面的阻塞…