当前位置: 首页 > news >正文

C语言的编译(预处理操作)+链接

目录

       翻译环境和执行环境

       预定义符号

       #define定义标识符

       续行符\

        #define定义宏

       再说一下,#define其实就是替换

       #和##

        宏和函数的对比

        命名约定

       #undef

       命令行定义

        条件编译

       文件包含

        避免头文件重复引用,否则会增加代码长度


 

 

       翻译环境和执行环境

在C中存在两个不同的环境,分别是翻译环境和执行环境,翻译环境又包括编译和链接两种,然后生成目标文件和可执行文件。编译本身也分为几个阶段:预处理选项、编译选项、汇编。

       预定义符号

__FILE__ 这是文件路径

__LINE__ 这是所在行号

__DATE__

__TIME__

__STDC__

Printf(“%s”,__FILE);

       #define定义标识符

#define MAX 100

       续行符\

Printf(“%s\t%d\

\t%f\n”,”张三\

”,34,3.5)

        #define定义宏

#define SQUARE(X) X*X

Printf(“%d”,SQUARE(5));

       再说一下,#define其实就是替换

       #和##

#ch等于”ch”,字符串

ch等于c##h,合并两个

#define PRINT(X,Y) printf("this value of " #Y " is " X"\n",Y)//Y当成了字符串,X当成了"%d",然后把Y的值给了Xint main()
{PRINT("%d", 3 + 4);PRINT("%d", 4 + 8);return 0;
}

 

        宏和函数的对比

属性#define定义宏函数
代码长度每次使用时,宏代码都会被插入到程序中,除了非常小的宏之外,程序的长度会大幅度增长函数代码只出现于一个地方,每次使用这个函数时,都调用那个地方的同一份代码
执行速度更快存在函数的调用和返回的额外开销,所以相对慢一些
操作符优先级宏参数的求值是在所有周围表达式的上下文环境里,除非加上括号,否则邻近操作符的优先级可能会产生不可预料的后果,所以建议宏在书写的时候多些括号函数参数只在函数调用的时候求值一次,它的结果值传递给函数,表达式的求值结果更容易预测
带有副作用的参数参数可能被替换到宏体中的多个位置,所以带有副作用的参数求值可能会产生不可预料的结果函数参数只在传参的时候求值一次,结果更容易控制
参数类型宏的参数与类型无关,只要对参数的操作是合法的,它就可以使用于任何参数类型函数的参数是与类型有关的,如果参数的类型不同,就需要不同的函数
调试宏是不方便调试函数是可以逐语句调试
递归宏不能递归函数可以递归

 

        命名约定

宏名全大写,函数名不全大写

       #undef

用于移除一个宏定义

#undef NAME

       命令行定义

Int a[MAX]

Int i = 0;

For(i=0;i<MAX;i++)

{

       A[i] = i+1;

}

For(i=0;i<MAX;i++)

{

       Printf(“%d\n”,a[i]);

}

在命令行里为MAX给值

        条件编译

#define __DEBUG__  定义

#ifdef __DEBUG__  如果定义

#ifnde __DEBUG__ 如果不定义

#endif 用来结束

只是判断它是不是被定义,如果不满足条件,在预处理阶段会消失。

       文件包含

#include ”Pet.h” 本地文件包含,如果找不到就去库文件找

#include <Pet.h> 直接去库文件找

        避免头文件重复引用,否则会增加代码长度

在每一个头文件前面加上#pragma once,其他源文件如果引用这个头文件两三个,都只会得到一个。

相关文章:

C语言的编译(预处理操作)+链接

目录 翻译环境和执行环境 预定义符号 #define定义标识符 续行符\ #define定义宏 再说一下&#xff0c;#define其实就是替换 #和## 宏和函数的对比 命名约定 #undef 命令行定义 条件编译 文件包含 避免头文件重复引用&#xff0c;否则会增加代码长度 翻译环境和执行环境 在C中存…...

FFmpeg实战 - 解复用与解码

大纲目录 文章目录 前置知识音视频基础概念解复用、解码的流程分析FFMPEG有8个常用库 常见音视频格式的介绍aac格式介绍&#xff08;ADTS&#xff09;h264格式分析FLV和MP4格式介绍 FFmpeg解码解封装实战数据包和数据帧&#xff08;AVPacket/AVFrame&#xff09;AVPacket/AVFra…...

8.5作业

1.思维导图 2.提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff0c;要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {string str;cout << "请输入一个字符串&quo…...

【问题】C++:有哪些类型的智能指针,区别?

智能指针是一种在 C 中管理动态分配内存的工具&#xff0c;可以帮助避免内存泄漏和提高程序的安全性。在 C11 标准引入之后&#xff0c;C 提供了三种主要类型的智能指针&#xff0c;它们分别是 std::unique_ptr、std::shared_ptr 和 std::weak_ptr。这些智能指针有不同的所有权…...

Go-反射

概念 在Go语言中&#xff0c;反射&#xff08;reflection&#xff09;是指在运行时检查程序的结构、变量和接口的机制。可以通过反射获取和修改变量的值、获取变量的类型信息、调用方法等操作。 反射主要由reflect包提供&#xff0c;它定义了两个重要的类型&#xff1a;Type和…...

【深度学习】DeepSpeed,ZeRO 数据并行的三个阶段是什么?

文章目录 ZeRO实验实验设置DeepSpeed ZeRO Stage-2 实验性能比较进一步优化DeepSpeed ZeRO Stage-3 和 CPU 卸载结论ZeRO ZeRO(Zero Redundancy Optimizer)是一种用于分布式训练的大规模深度学习模型的优化技术。它通过分片模型状态(参数、梯度和优化器状态)来消除数据并行…...

代码随想录算法训练营第三十六天 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零

一、1049. 最后一块石头的重量 II 题目链接&#xff1a;1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 (programmercarl.com)——1049. 最后一块石头的重量 II 视频讲解&#xff1a;动态规划之背包问题&#xff0c;这个…...

Pandas行列变换指南:数据重塑的艺术

数据分析中&#xff0c;数据的形态至关重要。pandas库提供了一系列工具&#xff0c;让我们能够轻松地重塑数据。以下是一些常见的pandas行列变换方法&#xff0c;每种方法都配有完整的代码示例。 环境准备 首先&#xff0c;确保你的环境中安装了pandas和numpy库&#xff1a; …...

1.MySQL面试题之innodb如何解决幻读

1. 写在前面 在数据库系统中&#xff0c;幻读&#xff08;Phantom Read&#xff09;是指在一个事务中&#xff0c;两次读取同一范围的数据集时&#xff0c;由于其他事务的插入操作&#xff0c;导致第二次读取结果集发生变化的问题。InnoDB 作为 MySQL 的一个存储引擎&#xff…...

Nginx中$http_host、$host、$proxy_host的区别

知识巩固&#xff01; 网上看到这篇文章&#xff0c;这里转载记录一下。 简介 变量是否显示端口值是否存在 host 浏览器请求的ip&#xff0c;不显示端口 否 "Host:value"显示 值为a:b的时候&#xff0c;只显示a http_host 浏览器请求的ip和端口号 是"Host:v…...

C# Unity 面向对象补全计划 七大原则 之 里氏替换(LSP) 难度:☆☆☆ 总结:子类可以当父类用,牛马是马,骡马也是马

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 请看专栏&#xff1a;http://t.csdnimg.cn/mIitr&#xff0c;尤其是关于继承的两篇文章&#xff…...

PXE批量安装操作系统

PXE批量安装操作系统 系统环境rhedhat7.9关闭vmware内的dhcp服务 kickstart自动安装脚本的制作 在rhel7系统中提供图形的kickstart制作方式 在rhel8中已经把图形的工具取消&#xff0c;并添加到rhn网络中 在rhel8中如果无法通过rhn网络制作kickstart&#xff0c;可以使用模板…...

float32转float16、snorm/sunorm8/16 学习及实现

1、基础 彻底搞懂float16与float32的计算方式-CSDN博客 例1&#xff1a;float32 0x3fd00000 32b0 011_1111 _1 101_0000_0000_0000_0000_0000 sign0 exp8b0111_1111 h7f d127 >0ffset 127-127 0 mantissa b101_0000_0000_0000_0000_0000(补1&#xff0c;1.1010…...

小型养猫空气净化器怎么选?小型养猫空气净化器产品评测

家养四只猫猫&#xff0c;对于各个角落的猫毛&#xff0c;感觉家里已经被猫毛占领了。感受一下40度高温的养猫人&#xff0c;给掉毛怪疏毛浮毛飘飘&#xff0c;逃不过的饮水机&#xff0c;各个角落&#xff0c;多猫拉臭传来的异味。 一、养猫带来的麻烦 掉毛&#xff1a;每到换…...

数学建模--二分法

目录 二分法的基本原理 应用实例 求解方程根 查找有序数组中的元素 注意事项 Python代码示例 ​编辑 延伸 二分法在数学建模中的具体应用案例有哪些&#xff1f; 如何选择二分法的初始区间以确保收敛速度和精度&#xff1f; 在使用二分法求解方程时&#xff0c;如何…...

如何使用 Puppeteer 绕过 Akamai

摘要&#xff1a; 本文深入探讨了在面对Akamai强大防护下的网页抓取挑战时&#xff0c;如何运用Puppeteer这一强大的Node.js库&#xff0c;通过模拟真实用户行为、动态请求处理等策略&#xff0c;高效且隐蔽地收集数据。我们将一步步揭开Puppeteer绕过Akamai的神秘面纱&#x…...

【硬件知识】车规级开发等级——AEQ-100和ISO26262标准

文章目录 一、定义二、区别1.应用场景2.使用方法 总结 一、定义 AEQ-100&#xff08;Automotive Electronics Council Q100&#xff09;是一个由汽车电子委员会&#xff08;AEC&#xff09;制定的标准&#xff0c;主要用于保证汽车电子元件的可靠性。它是一个关于汽车级半导体…...

Qt | QStackedBarSeries(堆叠条形图)+QPercentBarSeries(堆叠百分比条形图)

点击上方"蓝字"关注我们 01、QBarSet 1. 首先,需要创建一个名为QBarSet的类。 2. 在QBarSet类中,定义所需的属性和方法。 3. 属性可能包括条形的名称、颜色、值等。 4. 方法可能包括添加条形、删除条形、计算总和等。 5. 确保QBarSet类能够与QBar类协同工作,…...

C++——多态经典案例(一)组装电脑

案例&#xff1a;小明打算买两台组装电脑&#xff0c;假设电脑零部件包括CPU、GPU和内存组成。 一台电脑使用intel的CPU、GPU和内存条 一台电脑使用Huawei的CPU、GPU和Intel的内存条 分析&#xff1a;使用多态进行实现 将CPU、GPU和内存条定义为抽象类&#xff0c;内部分别定义…...

从传统监控到智能化升级:EasyCVR视频汇聚平台的一站式解决方案

随着科技的飞速发展和社会的不断进步&#xff0c;视频监控已经成为现代社会治安防控、企业管理等场景安全管理中不可或缺的一部分。而在视频监控领域&#xff0c;EasyCVR视频汇聚平台凭借其强大的多协议接入能力&#xff0c;在复杂多变的网络环境中展现出了卓越的性能和广泛的应…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...