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

波奇学c语言:代码的编译和链接

test.c(源文件)->编译->test.obj(目标文件)->链接->test.exe(可执行文件)

编译

1.预编译(预处理):text.c->text.i

使用gcc -E test.c 进行停止

  1. 预处理指令:头文件包含,宏定义的替换和删除

  1. 注释删除

2.编译:text.i->text.s

使用 gcc -S test.c 停止

将c语言代码翻译成汇编代码(语法分析 词法分析 语义分析 符号汇总)

符号汇总将全局变量名 函数名 main等符号汇总

3.汇编: test.s->test.o(目标文件elf格式)

使用 gcc -c test.c 停止

1.形成符号表(在符号汇总基础上,符号表上保存符号及其地址)

2.把汇编指令变成二进制指令

链接

合并段表(将多个目标文件对应的位置的数据合并)

符号表的合并和重定义(将符号对应有效的地址保留,无效地址去掉)

程序运行环境

  1. 程序载入内存

  1. 程序执行

  1. 执行程序代码

  1. 终止程序

预处理详解

1.预处理符号

_FIFE_  :文件路径
_TIME_  :编译时间
printf("%s",_FIFE_);

2.预处理指令:#define #include #pragma

预处理指令后面不要加分号

#define :定义宏

#define square(x) x^x//宏带的参数可以在后面使用

宏的参数可以有#define 定义的符号

#define a 10
#define add a+2

宏不能递归,字符串中的符号不会被定义

#:在字符串中插入宏的参数

利用字符串有自动连接的特点

#define PRINT(X) printf("the value of"#x"is %d"\n",x)
#define print(format,x) printf("the value of "x" is "format"",x)

//宏中的参数是字符串时不用#,只用""标出,如果不是字符串还要加上#

##:连接两边的符号放在一起

#define add(x,y) x##y//等于xy字符
11##22//1122

#undef 移除一个宏定义

#undef 宏名

宏比较函数的优势和缺点

  1. 规模更小,速度更快,节省函数调用,函数返回的时间。

  1. 宏的参数无类型(怎么和python好像)

  1. 宏的参数可以是类型(int, long )。(面向对象?)

缺点:

  1. 宏无法调试。

  1. 宏无法递归。

3.宏是直接替换的,影响代码长度。

4.操作符优先级问题。

命名:宏全部大写,函数名不要全部大写

命令行定义:在代码编译的时候,给某些变量赋值

条件编译:选择性编译(和if相似但作用阶段不同)

#ifdef PRINT//如果PRINT被定义则代码编译,否则在预处理阶段就删掉
#ifndef PRINT//如果PRINT不被定义则代码编译,否则在预处理阶段就删掉
printf("1");
#endif

和c中的if语句相似:

#if ex1
#elif ex2
#else 
#endlif

嵌套编译指令:#if嵌套#if

文件包含

自定义头文件

#include "wenjian.h"

库文件

#include <stdio.h>

""先在源文件目录下查找头文件,没找到就在库函数文件找到

<>直接在标准路径查找

头文件被包含多少次,预编译时就会出现多少次

防止头文件出现多次

#ifndef _TEST_H_
#define _TEST_H_
//contect
#endif
#pragma once

相关文章:

波奇学c语言:代码的编译和链接

test.c&#xff08;源文件&#xff09;->编译->test.obj&#xff08;目标文件&#xff09;->链接->test.exe&#xff08;可执行文件&#xff09;编译1.预编译&#xff08;预处理&#xff09;&#xff1a;text.c->text.i使用gcc -E test.c 进行停止预处理指令&am…...

计算机网络原理--传输层协议(TCP协议十大特性)

目录 1.认识TCP协议 TCP的协议段格式 2. 确认应答机制 3.超时重传 4.连接管理 <...

nvm控制node版本

安装 nvm 1、下载 nvm 官网安装包&#xff1a; github 选择 nvm-setup.exe 下载 2、安装 1、选择 nvm 安装目录&#xff08;可自定义&#xff09; 2、选择 node 安装目录&#xff08;如有安装过&#xff0c;可以选择以前安装目录&#xff0c;可 cdm 输入 where node 查看原nod…...

从0到1一步一步玩转openEuler--13 openEuler用户组管理

文章目录13.1 创建用户组13.1.1 groupadd命令13.1.2 用户组信息文件13.1.3 创建用户组实例13.2 修改用户组13.2.1 修改GID13.2.2 修改用户组名13.3 删除用户组13.4 将用户加入用户组或从用户组中移除13.5 切换用户组在Linux中&#xff0c;每个普通用户都有一个账户&#xff0c;…...

知不知道什么叫米筐量化?怎么来的?

现在量化市场范围越来越大&#xff0c;各种量化系统也是普遍性的了&#xff0c;不过米匡量化这个开发系统通常是由交易接口的专业开发团队开发的的结果&#xff0c;那么米匡量化的终端又是是怎么开发成功的呢&#xff1f;首先&#xff0c;我们可以从api接口的调用来了解&#x…...

Urho3D 事件Events

在脚本中&#xff0c;子系统通过以下全局财产可用&#xff1a;时间、文件系统、日志、缓存、网络、输入、ui、音频、引擎、图形、渲染器、脚本、控制台、debugHud、数据库。请注意&#xff0c;由于WorkQueue和Profiler的低级性质&#xff0c;它们不可用于脚本。 事件本身不需要…...

Rust学习入门--【8】复合类型

复合类型&#xff08;compound type&#xff09; 可以将多个不同类型的值组合为一个类型。 Rust中提供了两种内置的复合数据类型&#xff1a;元组&#xff08;tuple&#xff09;和数组&#xff08;array&#xff09;。 元组类型 元组是一个具有 固定长度 的数据集合 —— 无…...

【整理六】

1、props和state相同点和不同点&#xff1f;render方法在哪些情况下会执行&#xff1f; props是一个从外部传进组件的参数&#xff0c;由于React具有单向数据流的特性&#xff0c;所以他的主要作用是从父组件向子组件中传递数据&#xff0c;它是不可改变的&#xff0c;如果想要…...

Ubuntu20.04安装MySQL5.7与远程连接

一、安装MySQL5.7 1.更换镜像源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.old #备份原来的文件 sudo vim /etc/apt/sources.list #修改sources.list文件配置文件内容如下所示&#xff1a; # 清华镜像源 deb https://mirrors.tuna.tsinghua.edu.cn/ubu…...

【yolov5】首次尝试目标检测利用prompt(完整操作流程)

1、打开prompt 2、切换到pytorch所在环境 conda activate freezing我的环境名是freezing&#xff0c;这里根据自己环境名去激活切换 3、进入到yolov5项目所在路径 激活完环境后立即执行指令当然是无效的&#xff0c;首先要进入到你的项目目录 首先看一下自己的项目在那个位…...

三大指标继续狂飙!重庆啤酒:不惧强弱分化加剧,深耕高端市场

十多年前&#xff0c;重庆啤酒因为9个跌停而被一片唱衰&#xff0c;资本市场经典的“关灯吃面”典故自此出现&#xff0c;被股民沿用至今。不过自2020年&#xff0c;重庆啤酒开始逆转走势&#xff0c;股价连续上涨。2021年重庆啤酒营收突破百亿大关&#xff0c;净赚11.66亿元&a…...

MySQL数据库14——更新和删除数据

SQL里面使用UPDATE更新数据&#xff0c;删除使用DELETE语句。 Mysql要修改一下设置&#xff0c;才能更新&#xff1a; 在左上角菜单栏里面选择偏好栏&#xff0c;取消下面这个红框的勾选 更新单个字段的数据 如果运行环境为MySQL 则使用以下语句进行备份。 CREATE TABLE stu…...

Java面试——MyBatis篇

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

C++的 new 和 delete

文章目录一、new 和 delete 的使用二、operator new 和 operator delete 函数三、new 和 delete 的实现原理四、申请空间和释放空间应配套使用五、定位 new 表达式六、malloc/free 和 new/delete 的区别C语言的动态内存管理函数(malloc、calloc、realloc、free) 虽然可以继续在…...

MySQL 事务原理

文章目录1、事务1.1、ACID 特性1.1.1、原子性undo log1.1.2、一致性1.1.3、* 隔离性1.1.4、持久性redo log1.2、事务控制语句2、隔离级别2.1、隔离级别的分类2.1.1、读未提交 RU2.1.2、读已提交 RC2.1.3、可重复读 RR2.1.4、串行化 SC2.2、并发事务读异常2.2.1、* 脏读2.2.2、*…...

软件测试面试自我介绍/项目介绍居然还有模板?我要是早点发现就好了

目录 1、自我介绍 2、项目介绍 2.1、最全电商项目介绍 2.2、电商项目介绍 2.3、在线教育项目介绍 2.4、互联网金融项目介绍 总结 1、自我介绍 以XXX简历来举例&#xff08;参照下面的案例&#xff0c;编写你的自我介绍&#xff0c;框架就是&#xff1a;我是谁&#xff0…...

new RegExp的使用

1.RegExp是什么 当检索某个文本时&#xff0c;可以使用一种模式来描述要检索的内容。RegExp 就是这种模式 RegExp 对象用于存储检索模式。 var patt1new RegExp("e");当使用该 RegExp 对象在一个字符串中检索时&#xff0c;将寻找的是字符 “e” g &#xff1a;表…...

供应商管理软件如何选型 好用的供应商管理软件推荐

供应商管理是采购中的重要环节。对于很多企业来说&#xff0c;做好内部供应商管理就能在行业竞争中提升自身的效益与竞争能力&#xff0c;供应商已成为一种战略筹码。 但在企业进行供应商管理过程中&#xff0c;往往会遇到供应商信息数据收集不全、等级划分不合理、绩效评价机…...

Python3遍历文件夹提取关键字及其附近字符

要求&#xff1a; 1&#xff0c;遍历文件夹下所有的.xml文件 2&#xff0c;从.xml文件中提取关键字以及左右十个字符 3&#xff0c;输出到excel 一&#xff1a;遍历文件夹找到所有xml文件及其路径 for root, dirs, files in os.walk(self.inputFilePath):for file in files:…...

「1」线性代数(期末复习)

&#x1f680;&#x1f680;&#x1f680;大家觉不错的话&#xff0c;就恳求大家点点关注&#xff0c;点点小爱心&#xff0c;指点指点&#x1f680;&#x1f680;&#x1f680; 第一章 行列式 行列式是一个数&#xff0c;是一个结果三阶行列式的计算&#xff1a;主对角线的乘…...

C++7:STL-模拟实现vector

目录 vector的成员变量 构造函数 reserve size() capacity() push_back 一些小BUG 赋值操作符重载 析构函数 【】操作符重载 resize pop_back Insert 迭代器失效 erase 二维数组问题 总结一下 vector&#xff0c;翻译软件会告诉你它的意思是向量&#xff0c;但其…...

笑死,面试官又问我SpringBoot自动配置原理

面试官&#xff1a;好久没见&#xff0c;甚是想念。今天来聊聊SpringBoot的自动配置吧&#xff1f; 候选者&#xff1a;嗯&#xff0c;SpringBoot的自动配置我觉得是SpringBoot很重要的“特性”了。众所周知&#xff0c;SpringBoot有着“约定大于配置”的理念&#xff0c;这一…...

分布式缓存服务DCS-企业版性能更强,稳定性更高

背景介绍 近年来&#xff0c;随着各行业业务需求急速增加&#xff0c;数据量和并发访问量呈指数级增长&#xff0c;原来只能依附于关系型数据库的传统“缓存”逐渐难以支撑上层业务&#xff0c;开源Redis也面临着如“容量有限”、 “可靠性有限”、 “数据重复拷贝&#xff0c…...

HTTP基本原理

目录URL简单定义格式HTTP和HTTPSHTTP的请求过程。请求响应响应体HTTP2.0总结URL 简单定义 通过一个链接&#xff0c;使我们可以找到网络上的某个资源&#xff0c;这个链接就是URL。 格式 URL并不是随便写的&#xff0c;而是有固定的格式。基本的组成格式如下。 schme://[us…...

【云原生】Kubernetes(k8s)最新版本详细保姆级安装教程

前言 Kubernetes简称k8s&#xff0c;是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;k8s目标是让部署容器化的应用简单并且高效&#xff0c;k8s提供了应用部署&#xff0c;规划&#xff0c;更新&#xff0c;维护的一种机制。 本文是总结了在安…...

JVM - 类加载,连接和初始化

目录 类加载和类加载器 概述 类加载要完成的功能 加载类的方式 类加载器 类加载器的关系 类加载器说明 双亲委派模型 工作过程如下&#xff1a; 双亲委派模型说明&#xff1a; 破坏双亲委派模型&#xff1a; 类连接和初始化 类连接主要验证的内容 类连接中的解析…...

[carla]关于odometry坐标中的角度坐标系 以及 到地图的映射问题

1.获取车辆的Odometry原始信息 在carla中&#xff0c;通过订阅/carla/ego_vecle/odometry 可以查看车辆的全局位置信息,例如&#xff1a; > header: seq: 118872stamp: secs: 5946nsecs: 5720187frame_id: "map" child_frame_id: "ego_vehicle" pos…...

Python 正则表达式

正则表达式主要用来查找和匹配字符串的。 一、正在表达式基础 字符 描述 示例 TIY\ 示意特殊序列&#xff08;也可用于转义特殊字符&#xff09;如&#xff1a;空白字符 "\s" . 任何字符&#xff08;换行符除外&#xff09; "he..o" ^ 起始于 "^h…...

spark03-读取文件数据分区数量个数原理

代码val conf: SparkConf new SparkConf().setMaster("local").setAppName("wordcount")val sc: SparkContext new SparkContext(conf)val rdd: RDD[String] sc.textFile("datas/1.txt",2)rdd.saveAsTextFile("output")数据格式 &a…...

操作系统(day08)内存

存储单元 内存的几个基本概念 存储单元 内存地址从0开始&#xff0c;每个地址对应一个存储单元 存储单元大小根据计算机按照什么方式编址 按字节编址 则每个存储单元大小为一字节&#xff0c;即1B&#xff0c;即8个二进制位按字编址 看这个计算的字长是多少位&#xff0c;如…...

织梦网站图片无缝滚动怎么做/搜索引擎优化的意思

最近在做asp.net的网页&#xff0c;需要分析一些数据&#xff0c;用到了chart控件。 在本地测试的时候好好的&#xff0c;可是已发布到IIS服务器上以后就无法显示。 通过查询相关资料&#xff0c;原来修改web.config 修改成 <add key"ChartImageHandler" v…...

新浪广州疫情/郑州百度网站快速优化

1 left.jsp代码修改 d.add(0105,01,订单管理); d.add(010501,0105,订单管理,${pageContext.request.contextPath}/admin?methodfindAllOrders,,mainFrame); 2 AdminServlet代码findAllOrders // 5 获得所有订单 findAllOrders public void findAllOrders(HttpServletRequest r…...

网上购物商城系统论文/关键词优化的作用

使用dict和set 阅读: 346206dict Python内置了字典&#xff1a;dict的支持&#xff0c;dict全称dictionary&#xff0c;在其他语言中也称为map&#xff0c;使用键-值&#xff08;key-value&#xff09;存储&#xff0c;具有极快的查找速度。 举个例子&#xff0c;假设要根据同学…...

2016网站设计风格/软文代写多少钱一篇

区块链&#xff0c;可能是当下最有前景又充满分歧的技术与经济趋势。它给数字世界带来了“价值表示”和“价值转移”两项全新的基础功能。其潜力正在显现出来&#xff0c;但当下它又处于朦胧与野蛮生长的阶段。 对比互联网的发展史&#xff0c;现在的区块链可能相当于 1994 年…...

刷会员网站怎么做/永久免费二级域名申请

作者&#xff1a;帝都羊这些IntelliJ IDEA键盘快捷键可以让你专注于编写代码&#xff0c;让你的双手在键盘上起舞。1&#xff0c;搜索文件名&#xff1a;↑ Shift 快速连续按两下2&#xff0c;显示便捷提示和快速修复⌘ Cmd ⤶ Enter3&#xff0c;快速生成代码Control ⤶ Ent…...

百度上做网站模板/电商运营平台

使用SQL语句:select name from v$database; 使用show命令:show parameter db_name; 查看参数文件:查看init。ora文件 二、数据库实例名: 数据库实例名是用于和操作系统进行联系的标识,也就是说数据库和操作系统之间的交互使用的是数据库实例名。 实例名也被写入参数文件中…...