当前位置: 首页 > 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;主对角线的乘…...

AI时代来临,键盘布局将迎来怎样的变革?

1. AI时代的硬件探索智能手机统治了过去十几年的数字生态&#xff0c;它是注意力的黑洞&#xff0c;是人们最私密的随身之物。但手机从设计之初就是为「人盯着它」而生的&#xff0c;其全部逻辑止于屏幕。而AI的需求却恰恰相反&#xff0c;它需要持续感知物理世界&#xff0c;见…...

搜搜果:一种面向AI生成内容验真与品牌可见度监测的实现方案

1. 问题定义 随着大语言模型&#xff08;LLM&#xff09;广泛集成到搜索、问答、推荐等场景中&#xff0c;出现两个可观测的问题&#xff1a; 内容可信性问题&#xff1a;模型会以高置信度输出事实上不存在的实体、事件或引用&#xff08;幻觉&#xff0c;hallucination&#…...

基于Vue的纯前端的库存销售系统

&#x1f680;【开源】 基于Vue的纯前端的库存销售系统 项目地址&#xff1a;https://github.com/cuiyunhao-2026/warhouse-sales-management-system 这是基于art design pro模板的二次开发 模板地址&#xff1a;https://github.com/Daymychen/art-design-pro 你是否&#x…...

告别手敲!手把手教你给STM32CubeIDE 1.3.0装上Keil同款代码补全插件(附成品包)

5分钟极速配置&#xff1a;为STM32CubeIDE注入Keil级代码补全能力 从Keil切换到STM32CubeIDE的开发者&#xff0c;最不适应的莫过于代码补全功能的缺失。每次输入变量名时手动敲击完整字符的体验&#xff0c;让开发效率大打折扣。本文将分享一种无需Java基础、无需手动编译的插…...

别再死记公式了!用Multisim仿真带你玩转反相/同相比例运算电路

用Multisim仿真解锁比例运算电路的实战奥秘 在电子工程的学习中&#xff0c;运算放大器电路一直是让初学者又爱又恨的内容。传统的学习方法往往从公式推导开始&#xff0c;要求学生死记硬背各种电路配置下的增益公式。但今天&#xff0c;我们要打破这种枯燥的学习方式——通过…...

Win11 22H2 打不开 IE?亲测有效!一行代码直接调出独立 IE 窗口

很多升级到 Windows 11 22H2 的用户都遇到过这样的困扰&#xff1a;明明银行、政务、企业内网等旧系统明确要求用 IE 浏览器登录&#xff0c;可系统里找不到 IE 入口&#xff0c;Edge 的 IE 兼容模式又频繁失效&#xff0c;直接打开 IE 还会强制跳转到 Edge&#xff0c;折腾半天…...

AI Agent自动化修复GitHub Issue:从问题定位到PR提交全流程解析

1. 项目概述&#xff1a;一个能自动修复GitHub Issue并提交PR的AI技能 最近在折腾AI编程助手的时候&#xff0c;发现了一个挺有意思的东西&#xff0c;叫 issue-to-pr 。简单来说&#xff0c;这玩意儿是一个AI Agent的“技能包”&#xff0c;你把它装在你的AI编程工具&#…...

BIGEMAP自定义在线地图源:从零到一构建专属底图库

1. 为什么需要自定义地图源&#xff1f; 在日常工作中&#xff0c;我们经常会遇到这样的场景&#xff1a;项目需要特殊的地图底图&#xff0c;但软件内置的地图源无法满足需求&#xff1b;或者需要叠加多个地图源进行对比分析&#xff1b;又或者某些专业领域需要特定的地图数据…...

不止是支付码:用vue-qr在后台管理系统生成带品牌Logo的物料二维码

企业级二维码生成方案&#xff1a;基于Vue-QR的后台管理系统深度整合 在数字化营销与产品管理的浪潮中&#xff0c;二维码已成为连接线上线下场景的关键纽带。对于企业级后台管理系统而言&#xff0c;快速生成带有品牌标识的定制化二维码&#xff0c;不仅能提升用户信任度&…...

Python 爬虫进阶技巧:内网公开资源合规爬虫采集

前言 在企业园区、高校校园、政务机关、科研机构等封闭网络环境中&#xff0c;普遍存在内网公开资源服务节点&#xff0c;这类资源仅对内网 IP 段开放访问权限&#xff0c;外网无法直接穿透接入&#xff0c;包含公开文档库、共享文件服务器、内部资讯公告、教学资源库、政务公…...