c语言-编译预处理

news2024/11/24 0:20:51

9 编译预处理

预处理命令

一、预处理命令的作用

        -- 在编译之前,需要执行的命令                

        -- 编译预处理是在对源程序正式编译之前的处理,如inlcude先替换后计算

二、预处理命令

1、#include

                 -- 包含包括
(1) #include<>          -- 默认优先从系统目录中查找头文件

(2) #include" "           -- 默认优先从项目目录中查找头文件

2、#define

                -- 宏定义   -- 完全替换       

(1)不带参         -- 替换                 -- int_32 int *     -- int_32 a,b;

alt text

tip:执行结果为一个是指针的长度,一个是int类型的长度

(2)带参

        -- #define div(a,b) a/b     -- int a =10,b = 20;   ,   div(a-5,b+3) = 10-5/20+3 = 13;

        -- 找最大值         #define MAX(a,b) a>b?a:b;

3、#if - #endif

                -- 条件编译

(1)#if --- #endif -- 条件编译代码内容         --在.c源码文件中

(2)#if - #elif - #else -#endif         -- 条件编译代码内容 --在.c源码文件中

(3)#ifdef -- #endif         -- 如果定义...

(4)#ifndef --#define --#endif         --如果未定义... 定义.. 结束
                -- .h文件中使用较多         -- 防止重复编译

三、C语言的关键字

                -- 32个

1、数据类型之类

        -- char,int,short,long,float,double,void,signed,unsigned,struct,union,enum -- 12个

2、流程控制之类

        -- if,else,switch,case,break,default,while,do,for,continue,goto,return --12个

3、其他之类

        -- const,static,extern,typedef,sizeof -- 5个

4、废弃之类

        -- auto,register,volatile --3个

四、安装vscode工具

               -- 参考安装步骤

模块化开发

一、模块化开发的作用

1、按照项目的结构进行项目开发         -- 分文件,分类型进行项目开发

2、多文件进行程序开发         -- 方便功能移植,内容排错

二、项目的目录结构

1、include         -- 需要引入的.h文件所在位置,内容排错

2、lib                 -- 需要引入的第三方库文件

3、output          -- 编译后的可执行文件

4、src               -- 源码.c文件

alt text

三、模块化开发

1、.c文件         -- 功能实现的源码文件         -- 按照功能要求进行文件划分,分成不同的.c文件
                        -- 使用extern声明函数 ,表示使用外部资源的函数(extern 可以省略)

2、.h文件         -- 声明文件         -- 执行该功能所需要声明的内容

(1)声明文件中不能对变量进行赋值           !!不能在.h文件中对变量赋值!!

(2)声明文件中包含的内容:

                a. 实现该功能所需的内容         -- 引入其他资源

                b. 声明该功能的函数         -- 暴露自己的函数,提供给别人使用

例:

1、如何在虚拟机里打开vscode?

alt text

注:在存放项目目录的文件夹下打开终端,输入“code ./”表示在当前文件夹下打开vscode。

2、在项目目录中,src文件夹下存放的是源码文件,include文件夹下存放的是声明文件。

3、这里多写了个common.h用来声明经常被使用的函数和变量。

alt text

alt text

注:
    函数的extern是可以省略的,但是变量的尽量别省,这里在common.h文件中的内容是用来提供给多个.h文件使用。
    多个.c文件中要执行相同的函数和变量,就要在.h文件中声明,用extern关键字修饰函数和变量,这里extern的作用可以理解为他会去项目中的所有.c文件中找被extern修饰过的函数和变量的定义,然后在.c文件中实现。!!所以必须在其中一个.c文件中定义,在公用的.h文件中用extern来声明,然后在.c文件中来使用。要想使用全局变量和函数必须要用extern来声明。

4、最后执行.c文件

        -- 将src下的所有.c文件编译成可执行文件放在output里,在编译时用到的.h文件从include文件夹中寻找,最后执行可执行文件。

alt text

 tip:

alt text

alt text

alt text

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

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

相关文章

考研数学|张宇18讲太多太难,强化要不要换武老?

面对张宇18讲的难度&#xff0c;考虑是否更换辅导资料是一个值得深思的问题。首先&#xff0c;要认识到每个人的学习风格和需求是不同的。 张宇18讲可能因其深度和广度而受到一些考生的青睐&#xff0c;但同时也可能因其难度让部分考生感到挑战重重。 在决定是否更换辅导资料…

如何优雅的使用枚举类型,可以这样做!

使用枚举有时候会给我们带来了一些困扰&#xff1a; 前端展示数据&#xff0c;需要将枚举转成用户可读的数据显示。 代码中的枚举类型要存储数据库得转成数值类型。 那么本文介绍一种自动转换方案&#xff0c;大大方便前后端使用枚举类型 我们以用户状态为例&#xff0c;用…

创建型模式(Creational Patterns)之工厂模式(Factory Pattern)之工厂方法模式(Factory Method Pattern)

1. 工厂方法模式(Factory Method Pattern) 将对象的创建延迟到子类中实现&#xff0c;每个具体产品类都有一个对应的工厂类负责创建&#xff0c;从而使得系统更加灵活。客户端可以通过调用工厂方法来创建所需的产品&#xff0c;而不必关心具体的实现细节。这种模式符合开放-封闭…

客户数据分析模型:RFM模型的深度解析与应用探索

RFM模型&#xff0c;作为客户数据分析中的经典工具&#xff0c;凭借其简单而强大的分析能力&#xff0c;被广泛应用于各行各业。本文旨在深入探讨RFM模型的核心原理、应用价值&#xff0c;并详细阐述其在2C&#xff08;面向消费者&#xff09;和2B&#xff08;面向企业&#xf…

Lumerical 光束重叠率计算

Lumerical 光束重叠率计算 引言正文不同位置处 FDE Solver 对仿真结果的影响FDE Solver 不同尺寸下的光束重叠率计算引言 在 Lumerical 光纤模式仿真 一文中我们介绍了如何进行光纤模式的仿真。本文,我们将继续使用 SMF28 来进行光束重叠率计算说明。 正文 不同位置处 FDE …

大数据技术原理-spark的安装

摘要 本实验报告详细记录了在"大数据技术原理"课程中进行的Spark安装与应用实验。实验环境包括Spark、Hadoop和Java。实验内容涵盖了Spark的安装、配置、启动&#xff0c;以及使用Spark进行基本的数据操作&#xff0c;如读取本地文件、文件内容计数、模式匹配和行数…

【未授权访问漏洞复现~~~】

一: Redis未授权访问漏洞 步骤一:进入vulhub目录使用以下命令启动靶机… 进入目录:cd /vulhub-master/redis/4-unacc 启动:docker-compose up-d 检查:docker-compose ps步骤二:在Kali上安装redis程序进行服务的链接. #安装redis apt-get install redis #redis链接 redis-cli…

【Linux进程篇】并发艺术:Linux条件变量与生产消费者模型的完美融合

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;我们上篇博客中提到了线程互斥、引出了互斥锁解决了线程中的未将临界资源保护的问题。但是随之出来的问题——竞争锁是自由竞争的&#xff0c;竞争锁的能力太强的线程会导致其他线程抢不到票&#xff0…

Linux——线程互斥与同步

一、线程互斥 1.1 线程间互斥的概念 在学习管道的时候&#xff0c;管道是自带同步与互斥的。而在线程中&#xff0c;当多个线程没有加锁的情况下同时访问临界资源时会发生混乱。在举例之前&#xff0c;先了解几个概念。 临界资源&#xff1a;多个线程执行流共享的资源叫做临…

软甲测试定义和分类

软件测试定义 使用人工和自动手段来运行或测试某个系统的过程&#xff0c;其目的在于检验他是否满足规定的需求或弄清预期结果与实际结果之间的差别 软件测试目的 为了发现程序存在的代码或业务逻辑错误 – 第一优先级发现错误为了检验产品是否符合用户需求 – 跟用户要求实…

WPF学习(3)- WrapPanel控件(瀑布流布局)+DockPanel控件(停靠布局)

WrapPanel控件&#xff08;瀑布流布局&#xff09; WrapPanel控件表示将其子控件从左到右的顺序排列&#xff0c;如果第一行显示不了&#xff0c;则自动换至第二行&#xff0c;继续显示剩余的子控件。我们来看看它的结构定义&#xff1a; public class WrapPanel : Panel {pub…

【网页设计】基于HTML+CSS上海旅游网站网页作业制作

一、&#x1f468;‍&#x1f393;网站题目 旅游&#xff0c;当地特色&#xff0c;历史文化&#xff0c;特色小吃等网站的设计与制作。 二、✍️网站描述 &#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS 等来完成页面的排版设计&#x1f469;‍&#x1f39…

CSP初赛知识点讲解(一)

CSP初赛知识点讲解&#xff08;一&#xff09; 信息学竞赛哈夫曼树 哈夫曼编码冯.诺依曼理论计算机奖项例题训练&#xff08;一&#xff09;操作系统例题训练&#xff08;二&#xff09;计算机语言例题训练&#xff08;三&#xff09; 信息学竞赛 全国青少年计算机程序设计竞赛…

VINS-Fusion 多传感器全局位姿估计的一种通用优化框架

摘要 对于自动导航的机器人来说,精确的状态估计是基本问题。为了实现局部精确和全局无漂移的位姿估计,通常将具有互补属性的多个传感器进行融合。在一个小的区域内,局部传感器,如相机、IMU、Lidar等,提供了精确的位姿,而在一个大场景环境下,全局传感器,如gps、magneto…

java 变量及其常量

变量 数据类型关键字内存占用取值范围字节型byte1个字节-128 至 127 定义byte变量时超出范围,废了短整型short2个字节-32768 至 32767整型int&#xff08;默认&#xff09;4个字节-231 至 231-1 正负21个亿-2147483648——2147483647长整型long8个字节-263 至 263-1 19位数字-9…

【51单片机DS1302时钟芯片读取数码管显示打造小成本高品质】2022-12-23

缘由https://ask.csdn.net/questions/7867303 /*写回复缘由https://ask.csdn.net/questions/7867303*/ #include "reg52.h" sbit RSTP3^5;//DS1302允许(读/写)当RST为高电平时&#xff0c;所有的数据传送被初始化&#xff0c;允许对DS1302进行操作。如果在传送过程中…

不用PS也能抠图?点哪抠哪,简直是职场人的最强助手

抠图你还在用 PS 一点点抠吗&#xff1f; 不仅费时费力&#xff0c;还常常达不到理想效果&#xff0c;真的太让人崩溃了 但别担心&#xff0c;我找到了一个超棒的工具——千鹿设计助手的AI智能抠图插件。它就像你的私人设计小助手&#xff0c;能快速帮你把想要的元素抠出来&…

Mendix 创客访谈录|Mendix 如何化解工业企业数字化转型的复杂性

本期创客 田月萍 西门子 Advanta研发部门 大家好&#xff0c;我是田月萍&#xff0c;来自西门子Advanta的研发部门&#xff0c;专注于工业数字化转型。在我的职业生涯中&#xff0c;参与了多个关键项目的开发&#xff0c;涵盖了制造执行系统&#xff08;MES&#xff09;的实施&…

ECMA6Script学习笔记(六)

【摘要】 本文是对自己学习ES6的学习笔记回顾,后面是概要:文章深入探讨了ES6模块化处理&#xff0c;强调模块化在提高代码可维护性、可复用性和可扩展性方面的重要性。介绍了ES6模块化的三种导出方式&#xff1a;分别导出、统一导出和默认导出&#xff0c;并通过具体的代码示例…

3.特征工程-特征抽取、特征预处理、特征降维

文章目录 环境配置&#xff08;必看&#xff09;头文件引用1.数据集: sklearn代码运行结果 2.字典特征抽取: DictVectorizer代码运行结果稀疏矩阵 3.文本特征抽取(英文文本): CountVectorizer()代码运行结果 4.中文文本分词(中文文本特征抽取使用)代码运行结果 5.中文文本特征抽…