Cweek6

news2024/11/24 5:34:44

C语言学习

十六.程序环境和预处理

1.翻译环境和运行环境

编译又分为三个阶段:

  1. 预编译(文本操作):将include引入的头文件展开成代码,并把注释删除,使用空格代替注释,替换#define的文本
  2. 编译:把c语言代码翻译成汇编代码(语法分析、词法分析、语义分析、符号汇总)
  3. 汇编:把汇编代码转换成二进制指令,形成符号表

链接:1.合并段表,2.符号表的合并和重定位
运行环境:

  1. 程序必须载入内存中,有操作系统的环境中:这个一般由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成
  2. 程序的执行然后开始,接着调用main函数
  3. 开始执行程序代码,这个时候程序将使用一个运行时堆栈,存储函数的局部变量和返回地址。 程序同时使用静态内存
  4. 终止程序

2.预定义符号

图片消失了

3.#define定义标识符

语法:#define 名字 值(可以加;,最好不加,容易报错)
这个值也可以是一段代码,如果值过长,可以分成几行写,除最后一行外,每行的后面都加一个\

#define定义宏

宏的声明:#define name(parament-list) stuff
parament-list是由,隔开的参数列表
注意:传参是完全替换,如果参数里写1 + 1,那传过去的就是1 + 1,解决方法是把X + X写成((X) + (X))

#define替换规则

①调用宏时,首先对参数进行检查,查看是否包含任何由#define定义的符号。如果是,则替换
②替换文本随后被插入到程序中原来文本的位置,对于宏,参数名被他们的值替换
③最后,再次对结果文件进行扫描,查看是否包含任何由#define定义的符号。如果是,则重复上述步骤
注意事项:

  1. 宏参数和#define定义中可以出现其它#define定义的变量。但是对于宏,不能出现递归
  2. 当预处理器搜索#define定义的符号的时候,字符串常量的内容并不会被搜索

4.#和##

#define PRINT(X) printf("X say", X)

这段代码中,X是字符串中的字符,不会被替换
可以用#让参数插入到字符串中:

#define PRINT(X) printf(#X" say", X)

##的作用:可以把它两边的可以将两个宏参数连接成一个单一的标记
例子:

#define CONCAT(a, b) a ## b

int main() {
    int xy = 10;
    int x = 1;
    int y = 2;
    
    // 使用宏CONCAT来连接x和y,形成标识符xy
    printf("%d\n", CONCAT(x, y));  // 输出: 10
    
    return 0;
}

5.带有副作用的宏参数

当宏参数在宏的定义中出现超过一次的时候,如果参数带有副作用,那么这个宏的使用就存在风险
比如a++在宏中出现超过一次时,使用宏之后a会不止加一次1

6.宏和函数的对比

宏在调试时就被替换,所以效率高,宏是类型无关的
但是宏是无法调试的,不能递归的,不够严谨的,容易出错的
但是宏可以做到函数做不到的:宏的参数可以出现类型
宏的命名一般是全部大写,函数名全不大写

7.#undef

#undef 是一个预处理指令,用于取消定义一个预处理器符号(宏)。当你使用 #define 定义了一个宏之后,可以使用 #undef 来取消该宏的定义

8.命令行定义

在用命令行运行代码时,可以用命令行定义符号
如:gcc test.c -D SZ=5

9.条件编译

调试性的代码,删除可惜,保留又碍事,所以我们可以选择性的编译
常见的条件编译指令:

  1. #if 代码 #endif
  2. #if 代码 #elif 代码 #else 代码 #endif
  3. #if defined(符号)等价于#ifdef 变量名,意为如果符号被定义了(后面也要加#endif)
  4. #if !defined(符号)等价于#ifndef 变量名,意为符号没有被定义(后面也要加#endif)
  5. #if defined(符号) 代码 #elif defined 代码 #endif

10.文件包含

本地文件被包含:#include “文件名”
库文件包含:#include <文件名>
如果硬要使用 #include <> 来包含本地文件,编译器会在系统的标准头文件路径中查找该文件,而不是在当前源文件所在的目录中查找。因此,如果你的本地文件不在标准头文件路径中,编译器就会报错,无法找到该文件

文件嵌套包含

在引文件时可能会重复引用,为了避免这个问题可以用条件编译:
在每个文件的开头写:
请添加图片描述

或者:
#pragma once

11.其它预处理指令

图片消失了

详见官网

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

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

相关文章

基于改进字典学习的旋转机械故障诊断方法(MATLAB)

在过去的二十年里&#xff0c;稀疏表示在各个领域引起了广泛的关注。它的核心思想是将信号描述为尽量少的字典原子&#xff0c;在计算机视觉、生物学、特征提取和机械故障诊断方面显示出强大而可靠的能力。SR通常分为两个步骤&#xff1a;构建字典和学习稀疏系数。对于稀疏系数…

U盘文件夹变exe:现象解析与数据恢复策略

一、U盘文件夹变exe现象描述 在日常使用U盘进行数据传输和存储的过程中&#xff0c;部分用户可能会遭遇一种异常现象&#xff1a;原本正常的文件夹突然变成了可执行文件&#xff08;即后缀为.exe的文件&#xff09;。这种变化不仅影响了用户对文件的正常访问和管理&#xff0c…

怎么加密U盘数据?U盘加密软件哪个好?

U盘是我们在生活和工作中最常用的移动存储设备&#xff0c;而为了避免U盘数据泄露&#xff0c;我们需要使用U盘加密软件来加密保护U盘数据。那么&#xff0c;U盘加密软件哪个好呢&#xff1f;下面我们就一起来了解一下吧。 BitLocker加密 BitLocker是Windows系统提供的磁盘加密…

【一步一步了解Java系列】:认识String类

看到这句话的时候证明&#xff1a;此刻你我都在努力 加油陌生人 个人主页&#xff1a;Gu Gu Study专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff1a;小闭…

MS1112驱动开发(iio框架)

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…

揭秘未来:用线性回归模型预测一切的秘密武器!

线性回归模型 1. 引言2. 理论基础2.1 线性回归模型的定义与原理原理与关键假设模型参数估计 2.2 模型评估指标2.2.1 残差分析2.2.2 拟合优度指标2.2.3 统计检验 3. 应用场景3.1. 金融领域中的应用3.2. 医疗健康领域中的应用3.3. 其他领域的应用 4. 实例分析4.1、数据集选择4.2、…

企业三要素核验-公司三要素核验-企业三要素核验接口

接口简介&#xff1a;企业三要素验证&#xff0c;输入公司名称、统一社会信用代码、法人姓名验证是否一致 1.输入公司名称、统一社会信用代码、法人姓名验证是否一致。 2.查询结果仅供参考&#xff0c;不作法定证明使用。 3.不返回其它信息 接口地址&#xff1a;https://www.wa…

【基于 PyTorch 的 Python 深度学习】8 注意力机制(4):PyTorch 实现(上)

前言 文章性质&#xff1a;学习笔记 &#x1f4d6; 学习资料&#xff1a;吴茂贵《 Python 深度学习基于 PyTorch ( 第 2 版 ) 》【ISBN】978-7-111-71880-2 主要内容&#xff1a;根据学习资料撰写的学习笔记&#xff0c;该篇主要介绍了如何使用 PyTorch 实现 Transformer 。 代…

数据库系统概念(第八周 第一堂)(规范化关系数据库设计)(强推学习!!!)

目录 前言 E-R模型质量低的深层原因 数据依赖 函数依赖 主属性/非主属性 逻辑蕴含与闭包 Armstrongs Axiom 求解F闭包算法 求解属性集闭包算法 属性集闭包的作用 候选码求解理论和算法 候选码求解理论 无关属性 检验方法 正则覆盖 关系模式的设计 关系…

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的&#xff08;比如这篇&#xff1a;从0开始在visual studio上安装opencv&#xff08;超详细&#xff0c;针对小白&#xff09;&#xff09;&#xff0c;但是中间出现了一些别人没有遇到的问题&#xff0c;虽然原因没有找到&#xff0c;但…

[自动驾驶 SoC]-3 英伟达Orin

NVIDIA Jetson AGX OrinTM series (资料来源&#xff1a;nvidia-jetson-agx-orin-technical-brief.pdf) 1 整体介绍 1) Orin SoC结构 Orin SoC&#xff0c;如下图所示&#xff0c;由一个NVIDIA Ampere architecture GPU, Arm Cortex-A78AE CPU, 下一代深度学习核视觉处理加速…

MicroPython+ESP32 C3开发上云

传感器PinI/O状态D412输出1开0关D513输出1开0关 概述 MicroPython是python3编程语言的精简实现&#xff0c;能够在资源非常有限的硬件上运行&#xff0c;如MCU微控制器Micropython的网络功能和计算功能很强大&#xff0c;有非常多的库可以使用&#xff0c;它为嵌入式开发带来了…

Windows NT 3.5程序员讲述微软标志性“3D管道”屏幕保护程序的起源故事

人们使用屏保程序来防止 CRT 显示器"烧毁"&#xff0c;因为静态图像会永久损坏屏幕。像 3D Pipes 这样的屏保程序能在显示器处于非活动状态时为其提供动画效果&#xff0c;从而保护屏幕并延长其使用寿命。此外&#xff0c;它们还能在用户不使用电脑时为其提供可定制的…

盘点有趣的人工智能开源项目一

字幕导出 zh_recogn是一个专注于中文语音识别的字幕生成工具&#xff0c;基于魔塔社区Paraformer模型。它不仅支持音频文件&#xff0c;还能处理视频文件&#xff0c;输出标准的SRT字幕格式。这个项目提供了API接口和简单的用户界面&#xff0c;使得用户可以根据自己的需求灵活…

值得推荐的品牌维权控价方法

数据调查 全面了解线上各渠道&#xff08;如淘宝、天猫、拼多多、京东、抖音、快手等&#xff09;的低价情况&#xff0c;包括哪些是授权店低价、窜货或假货&#xff0c;为后续针对性治理提供依据。人工排查适用于链接不多的情况&#xff0c;链接数量庞大时利用系统监测更高效…

睿烨蜘蛛池福建官网下载

baidu搜索&#xff1a;如何联系八爪鱼SEO? baidu搜索&#xff1a;如何联系八爪鱼SEO? baidu搜索&#xff1a;如何联系八爪鱼SEO? 现在做站群程序的时候,由于百度、搜狗蜘蛛越来越少了,所以缓存也跟着减少,很多人都降低了服务器的配置,这个时候google蜘蛛却疯狂涌入,烦不胜烦…

Pulsar 社区周报 | No.2024-06-14 | 增强 Pulsar Broker 级别的监控指标

“ 各位热爱 Pulsar 的小伙伴们&#xff0c;Pulsar 社区周报更新啦&#xff01;这里将记录 Pulsar 社区每周的重要更新&#xff0c;每周发布。 ” 本期主题&#xff1a;增强 Pulsar Broker 级别的监控指标 在 Pulsar 的当前度量指标框架中&#xff0c; pulsar_out_bytes_total …

AbMole带你探索细胞的“铁”门:Piezo1通道在椎间盘退变中的关键角色

在生物医学领域&#xff0c;铁是细胞功能不可或缺的元素&#xff0c;但铁的异常积累却可能成为细胞的“隐形杀手”。最近&#xff0c;一项发表在《Bone Research》上的研究&#xff0c;为我们揭开了铁代谢与椎间盘退变之间神秘联系的一角。这项研究不仅深化了我们对铁离子通道P…

[机器学习] Stable Diffusion初体验——基于深度学习通过神经网络的强大AI平台

文章目录 前言平台介绍 一.创建应用 Stable Diffusion WebUI初始化上传模型&#xff0c;VAE&#xff0c;lora 介绍sd模型&#xff0c;vae&#xff0c;lora模型进入应用文生图工作区调参区图生图 结语 前言 在这个信息爆炸的时代&#xff0c;AI技术正以前所未有的速度发展着。图…

Appium+python自动化(九)- 定位元素工具(义结金兰的两位异性兄弟)(超详解) 密码保护

宏哥微信粉丝群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 简介 环境搭建好了&#xff0c;其他方面的知识也准备的差不多了&#xff0c;那么我们就开始下一步元素定位&#xff0c;元素定位宏哥主要介绍如何使用uiautomatorviewer&#xff0c;通…