C语言预处理详解(下)(31)

news2024/11/24 5:31:29

文章目录

  • 前言
  • 一、命令行定义
  • 二、条件编译
  • 三、文件包含
    • 头文件被包含的方式
    • 嵌套文件包含
  • 总结


前言

  再介绍几点吧!


一、命令行定义

  许多C 的编译器提供了一种能力,允许在命令行中定义符号。用于启动编译过程

当我们根据同一个源文件要编译出不同的一个程序的不同版本的时候,这个特性便起到了作用。(假定某个程序中声明了一个某长度的数组,但是一个机器的内存有限,我们需要一个很小的数组,但是另外一个机器的内存很大,我们需要一个较大的数组)

以下代码就是一个具体的例子:
在这里插入图片描述

二、条件编译

  条件编译,即满足条件就参与编译,不满足条件就不参与编译
  未满足条件编译指令的代码,在预处理阶段将被编译器自动删除,不参与后面的代码编译过程

常见的条件翻译指令有以下几种:

  1. 单分支的条件编译
//如果#if后面的表达式为真,则“待定代码”的内容将参与编译
//否则“待定代码”的内容不参与编译
#if 表达式
	//待定代码
#endif
  1. 多分支的条件编译
//多分支的条件编译类似于if-else语句
//“待定代码1,2,3,4”之中只会有一段代码参与编译
#if 表达式
	//待定代码1
#elif 表达式
	//待定代码2
#elif 表达式
	//待定代码3
#else 表达式
	//待定代码4
#endif
  1. 判断是否被定义
//如果“表达式”被#define定义过,则“第一种的正面”的“待定代码”将参与编译,否则不参与编译。
//“第一种的反面”的执行机制与“第一种的正面”恰好相反

//第一种的正面
#if defined(表达式)
	//待定代码
#endif

//第一种的反面
#if !defined(表达式)
	//待定代码
#endif
  1. 嵌套指令
#if defined(OS_UNIX)
	#ifdef OPTION1
		unix_version_option1();
	#endif
	#ifdef OPTION2
		unix_version_option2();
	#endif
#elif defined(OS_MSDOS)
	#ifdef OPTION2
	msdos_version_option2();
	#endif
#endif

三、文件包含

头文件被包含的方式

假如你包含了以下头文件:

#include "filename"

此时查找策略:先在源文件所在目录下查找,如果该头文件未找到,编译器就像查找库函数头文件一样在标准位置查找头文件。如果找不到就提示编译错误

假如你包含了以下头文件:

#include <filename>

此时查找策略:查找头文件直接去标准路径下去查找,如果找不到就提示编译错误

所以说,对于库函数也可以使用 “ ” 的包含方式,只不过效率不高

嵌套文件包含

在这里插入图片描述
最终test.c程序中就会出现两份comm.h的内容。这样就造成了文件内容的重复

解决办法有两种:

  1. 使用条件编译,如果定义过,则无法再进行编译
#ifndef __TEST_H__
#define __TEST_H__
//头文件的内容
#endif  
  1. 加上该语句:
#pragma once 

总结

  终于结束了,马上就要迎来最后一篇收尾
  事先预告,虽然是最后一篇,但是并不是那么简单!

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

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

相关文章

VScode连接远程服务器踩坑实战(新版离线vscode-server安装)

想要用VScode连接远程服务器&#xff0c;但远程服务器并没有连接外网&#xff0c;因此需要离线手动安装vscode-server但网上的方法都是旧版本的安装&#xff0c;没有新版本的配置。因此记录一下我都踩坑实战。 1、VScode扩展安装与配置 &#xff08;1&#xff09;vscode扩展安…

双十一买什么最划算?2024年双十一选购攻略汇总!

随着一年一度的双十一购物狂欢节日益临近&#xff0c;消费者们纷纷摩拳擦掌&#xff0c;准备在这个全球最大的购物盛宴中抢购心仪已久的商品。双十一不仅是一场购物的狂欢&#xff0c;更是商家们推出优惠、促销的绝佳时机。然而&#xff0c;面对琳琅满目的商品和纷繁复杂的优惠…

《数据密集型应用系统设计》笔记——第二部分 分布式数据系统(ch5-9)

第5章 数据复制 目的&#xff1a; 地理位置更近&#xff0c;降低延迟故障冗余提高读吞吐量 主节点与从节点&#xff08;主从复制&#xff09; 主从复制&#xff1a; 写请求发送给主节点&#xff0c;主节点将新数据写入本地存储&#xff1b;主节点将数据更改作为复制的日志发送…

医学图像处理入门:VS2019+DCMTK3.6.8编译及环境配置

1. 下载DCMTK的源文件包和支持库 首先下载dcmtk软件包&#xff0c;此处我们下载源码和支持库来进行自己编译。下载网址&#xff1a; https://dicom.offis.de/en/dcmtk/dcmtk-software-development/ 如图所示&#xff0c;选择合适的版本进行下载&#xff0c;此处采用VS2019进行…

AI生成视频

分享一个免费的根据文案脚本AI生成视频的网站&#xff1a; https://pictory.ai/?el2000&htrafficsourcepictorybloghttps://pictory.ai/?el2000&htrafficsourcepictoryblog 1、点击Get Started For Free登录 2、登录进入个人主页&#xff0c;可以选择不同的方式生成视…

快速理解OPTIONS请求

快速理解OPTIONS请求 简述实际遇到的问题 简述 OPTIONS请求常被用作一种“预检”请求&#xff0c;以检查实际请求&#xff08;如POST或PUT&#xff09;是否可以被服务器接受。 为什么要有OPTIONS请求&#xff1f; 比如当一个POST请求比较复杂时&#xff0c;传输一个POST请求比…

pdf怎么删除多余不想要的页面?删除pdf多余页面的多个方法

pdf怎么删除多余不想要的页面&#xff1f;在日常办公或学习中&#xff0c;我们经常会遇到需要处理PDF文件的情况。PDF文件因其格式稳定、不易被篡改的特点而广受青睐&#xff0c;但在编辑方面却相对不如Word等文档灵活。有时&#xff0c;在接收或创建的PDF文件中&#xff0c;可…

【含文档】基于Springboot+Android的校园论坛系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

Linux-sed和gawk

文本处理-sed编辑器 文本处理-gawk程序 文本处理-sed编辑器基础 文本处理-sed编辑器基础-使用地址 文本处理-sed编辑器基础-删除行 文本处理-sed编辑器基础-插入和附加文本 文本处理-sed编辑器基础-修改行/转换命令 文本处理-sed编辑器基础-回顾打印-打印行/打印行号/列出行 文…

如何用一套商业模式 整合本地商业 打造强有力的商家联盟!

大家好&#xff0c;我是吴军&#xff0c;来自一家专注于软件开发的公司。 近年来&#xff0c;一种新颖的商业模式异军突起&#xff0c;它不仅为消费者和零售商带来了实质性的利益&#xff0c;也为平台创造了可观的经济回报。 在当前经济环境下&#xff0c;消费者行为愈发理性&…

[SQL] 安装

一 Windows 1.1 下载 进入Mysql的官方网站,点击下载->找到社区版本 选择对应操作系统进行下载。 点击下载 选择直接下载即可 1.2 安装 选择Full安装&#xff1a; MySQL服务器、客户端程序和其他附加工具如果只需要服务端那就选择Server only即可 点击执行,等待组件下载完…

如何批量下载淘宝主图、详情图和SKU图?

如何批量下载淘宝主图、详情图和SKU图&#xff1f;在电商行业竞争日益激烈的今天&#xff0c;电商从业者面临着前所未有的挑战与机遇。为了提升商品竞争力&#xff0c;深入分析对手策略及优化自家产品展示成为日常工作的重中之重。其中&#xff0c;批量下载淘宝主图、详情图和S…

vue cli配置环境变量并使用

1.在根路径下创建.env文件 2.写.env文件内容 文件里存储的值的key要以 VUE_APP 开头 VUE_APP VUE_APP_PUBLIC_PATH/ VUE_APP_PUBLIC_PATH/helper/ 3.使用 publicPath: process.env.VUE_APP_PUBLIC_PATH, 4.配置package.json "serve:production": "vue-cli-s…

FreeRTOS-软件定时器

FreeRTOS-软件定时器 一、软件定时器简介1.1 软件定时器的状态和工作模式 二、软件定时器结构体成员和API函数三、软件定时器实验 一、软件定时器简介 定时器&#xff1a;指定时间开始&#xff0c;经过一个指定的时间&#xff0c;触发一个超时事件&#xff0c;用户可自定义定时…

ThinkPHP5bootstrapMySQL开发学习平台(包括后台管理功能、PC端网页、移动端网页)手把手运行源码

一、项目预览(全部源码链接在最下面) 功能及页面持续优化中...... 二、本地运行方式 1、下载源码包进行解压(源码在最下面) 2、下载phpstudy_pro,并运行Apache&

精华帖分享 | 判定策略失效的新方法——统计假设检验

本文来源于量化小论坛策略分享会板块精华帖&#xff0c;作者为元亨利贞&#xff0c;发布于2023年12月25日。 以下为精华帖正文&#xff1a; 1、起因 去年刚入门B圈&#xff0c;由于之前有做商品期货择时的经验&#xff0c;通常来讲&#xff0c;趋势跟随&#xff0c;并且回测结…

谁说电商选品找货源没有捷径,只要你用对工具!

最近跟很多同行聊&#xff0c;都在抱怨选品难的问题&#xff0c;都说7分靠选品&#xff0c;3分靠运营&#xff0c;对于选品来说&#xff0c;并没有捷径可走&#xff0c;但其实是有很多不同的角度的。 现在市面上大部分开发做的选品&#xff0c;“选品方法”或“产品分析方法”…

SiLM266x系列SiLM2661高压电池组前端充/放电高边NFET驱动器 为电池系统保护提供可靠性和设计灵活性

SiLM2661产品概述&#xff1a; SiLM2661能够灵活的应对不同应用场景对锂电池进行监控和保护的需求&#xff0c;为电池系统保护提供可靠性和设计灵活性。是用于电池充电/放电系统控制的低功耗、高边 N 沟道 FET 驱动器&#xff0c;高边保护功能可避免系统的接地引脚断开连接&am…

Pycharm连接AutoDL服务器 文件上传 启动终端

Pycharm AutoDL 需要使用pycharm专业版&#xff08;学生可以通过教育邮箱认证&#xff0c;每年一次&#xff09;。 首先进入AutoDL官网&#xff1a;AutoDL-品质GPU租用平台-租GPU就上AutoDL进行学生注册登录&#xff08;可以领10元的代金券&#xff09;点击右上角的控制台&am…

京东web 京东e卡绑定 第二部分分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我删…