【C语言】C语言编译链接和Win32API简单介绍

目录

  • 翻译环境和运行环境
    • 翻译环境
      • 编译器
        • 预处理(预编译)
        • 编译
        • 链接
    • 执行环境
  • Win32API是什么
  • 控制台程序
  • 控制台获取坐标COORD
  • GetStdHandle函数
  • GetConsoleCursorinfo函数
  • CONSOLE_CURSOR_INFO
  • SetConsoleCursorInfo函数
  • SetConsoleCursorPostion函数
  • GetAsyncKeyState函数

在这里插入图片描述

翻译环境和运行环境

翻译环境

翻译环境就是在这将源代码转换成可执行的二进制指令(机器指令)。

进行编译和链接过程。

在这里插入图片描述

.c源程序先单独经过编译器生成对应的目标文件.obj(在windows环境下).o(在Linux环境下)。

多个目标文件和链接库一起经过链接器生成可执行程序。

编译器

编译器分为3个过程 预处理(预编译),编译,汇编。
在这里插入图片描述

预处理(预编译)

主要处理源文件中#开始的预编译指令。
规则如下:

  1. 将宏定义替换进去并删除#define。
  2. 处理条件编译。
  3. 删除注释 。
  4. 将头文件包含内容插入预编译位置。该头文件中可以包含其他头文件(可以递归进行)。
  5. 添加行号和文件名表示,以便后续生成调试信息。
  6. 保留#pragma的编译指令。
编译
  1. 词法分析:将代码中的字符分割为一系列记号(关键字,标识符,字面量,特殊字符等)。
  2. 语法分析:将词法分析产生的记号进行语法分析,产生语法树。
  3. 语义分析:对表达式的语法层面分析。
链接

过程主要包括:地址和空间分配,符号决议和重定位等步骤。

目的:将一堆文件链接在一起生成可执行文件。

执行环境

执行环境就是用于实际执行代码。

Win32API是什么

Win32API百度介绍就是这样:
在这里插入图片描述
意思就是有一系列函数服务于应用程序,这些函数简称API(Application Programming Interface)函数。

控制台程序

平常我们使用的黑框程序就是控制台程序,那我们可以调整它的大小吗?当然。
我们就用cmd命令来控制窗口的长宽和名字,以修改为20行,100列和贪吃蛇名字为例。

system("mode con cols=100 lines=20;")
system("title 贪吃蛇");

控制台获取坐标COORD

在控制台程序中,左顶角就是坐标(0,0),往右是x横轴,往下是y轴。
而COORD是Windows API中定义的一个结构体用来表示坐标。
类型声明如下:

typedef struct _COORD{SHORT X;SHORT Y;
}COORD,*PCOORD;

GetStdHandle函数

在这个函数是用于从一个特定的标准设备(标准输入、标准输出或标准错误)中获得一个句柄(用来标识不同设备的数值),使用这个句柄可以操作设备。

HANDLE hOutPut = NULL;//初始一个句柄
hOutPut = GetStdHandle(STD_OUTPUT_HANDLE);

GetConsoleCursorinfo函数

用于指定控制台屏幕缓冲区的光标大小和可见性信息。
使用例子:

HANDLE hOutPut = NULL;//初始一个句柄
//获得标准输出的句柄
hOutPut = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorinfo(hOutPut,&CursorInfo);//获取光标信息

CONSOLE_CURSOR_INFO

这是一个结构体,包含有关控制台光标的信息。
类型声明如下:

typedef struct CONSOLE_CURSOR_INFO{DWORD dwSize;BOOL bVisible;
}CONSOLE_CURSOR_INFO,*PCONSOLE_CURSOR_INFO;

dwSize表示字符单元格所占大小(百分比),bVisible表示光标可见性,可见值为TRUE。

SetConsoleCursorInfo函数

设置控制台光标大小和可见性。
使用实例:

HANDLE hOutPut = GetStdHandle(STD_OUTPUT_HANDLE);
//隐藏光标
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(hOutPut,&CursorInfo);//获取控制台光标信息
CursorInfo.bVisible = false;//隐藏光标
SetConsoleCursorInfo(hOutPut,&CursorInfo);//设置控制台光标状态

SetConsoleCursorPostion函数

设置控制台屏幕缓冲区的光标位置。
使用实例:

COORD pos = {10,5};
HANDLE hOutPut = NULL;
hOutPut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPostion(hOutPut,pos);

GetAsyncKeyState函数

获取按键情况的函数。
将键盘上每个键的虚拟键值传给函数,函数通过返回值判断改键的状态。
函数的返回值是16位的short类型,最高位是1,说明当前按键是按下状态,最高位是0,说明当前按键是抬起状态。如果最低位被置为1说明按键被按过,否则为0。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字化时代的供应链管理综合解决方案

目录 引言背景与意义供应链管理综合解决方案的目标 📄供应链管理系统主要功能系统优势 📄物流管理系统主要功能系统优势 📄订单管理系统主要功能应用场景 📄仓储管理系统系统亮点主要功能系统优势 📄商城管理系统主要功…

【MyBatis】——入门基础知识必会内容

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

MySql性能调优01-[数据结构和索引]

数据结构和索引 什么是索引索引的种类常见索引数据结构和区别二叉树 红黑树 什么是索引 索引的种类 在Mysql中索引是在存储引擎层实现的,而不是在服务层实现的 按数据结构分:Btree索引、Hash索引、Full-text索引按存储结构分:聚簇索引、非聚…

数据结构——约瑟夫环C语言链表实现

约瑟夫环问题由古罗马史学家约瑟夫(Josephus)提出,他参加并记录了公元66—70年犹太人反抗罗马的起义。在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。起义者表示“宁为玉碎不为瓦全”,约瑟夫则想“留得青…

go语言Gin框架的学习路线(六)

gin的路由器 Gin 是一个用 Go (Golang) 编写的 Web 框架,以其高性能和快速路由能力而闻名。在 Gin 中,路由器是框架的核心组件之一,负责处理 HTTP 请求并将其映射到相应的处理函数上。 以下是 Gin 路由器的一些关键特性和工作原理的简要解释…

第十八章 Express multer 文件上传

本章将学习Express multer 文件上传 ,因为Nest 的文件上传是基于 Express 的中间件 multer 实现的,所以在学习 Nest 文件上传之前,我们先学习下 multer 包 首先先创建 multer-test 文件夹执行下面代码 创建package.json npm init -y接着安装…

单例模式的简单理解

单例模式 前言一、单例模式是什么二、单例模式的使用饿汉模式单线程下的懒汉模式多线程下的懒汉模式(优化懒汉模式)加锁 三、总结 前言 设计模式是将一些经典的问题场景进行整合归纳,并提供一些解决方案,相当于一种“套路”。 熟…

数据仓库介绍_维度表(三)

维度表概述 维度表是维度建模的基础和灵魂。前文提到,事实表紧紧围绕业务过程进行设计,而维度表则围绕业务过程所处的环境进行设计。维度表主要包含一个主键和各种维度字段,维度字段称为维度属性。 表设计步骤 确定维度(表&…

SQL 针对上面的salaries表emp_no字段创建索引idx_emp_no

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 针对salaries…

【开源合规】开源许可证风险场景详细解读

文章目录 前言关于BlackDuck许可证风险对比图弱互惠型许可证举个例子具体示例LGPL系列LGPL-2.0-onlyLGPL-2.0-or-laterLGPL-2.1-onlyLGPL-2.1-or-laterLGPL-3.0-onlyLGPL-3.0-or-laterMPL系列MPL-1.0MPL-1.1MPL-2.0EPL系列EPL-1.0EPL-2.0互惠型许可证GPL系列GPL-1.0GPL-2.0GPL-…

3.相机标定原理及代码实现(opencv)

1.相机标定原理 相机参数的确定过程就叫做相机标定。 1.1 四大坐标系及关系 (1)像素坐标系(单位:像素(pixel)) 像素坐标系是指相机拍到的图片的坐标系,以图片的左上角为坐标原点&a…

合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破

合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破 文章目录 合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破前言合合信息TextIn平台:智能文档处理的领军者文档解析引擎:百页文档秒级处理大模型的发展背景…

【机器学习】独立成分分析(ICA):解锁信号的隐秘面纱

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 独立成分分析(ICA):解锁信号的隐秘面纱引言I…

若依 ruoyi-vue SpringBoot highlight-textarea 输入框敏感词关键词高亮标红(二)

参考文章,非常感谢大佬的分享 实现可高亮的输入框 — HighlightTextarea GitHub:highlight-textarea 可看作者上一篇文章 若依 ruoyi-vue SpringBoot聊天敏感词过滤sensitive-word(一) 效果图 审核时,输入框高亮敏感词&#xff…

vue3 + tsx 表格 Action 单独封装组件用法

前言 先上图看右侧列 action 的 UI 效果: 正常来说,如果一个表格的附带 action 操作,我们一般会放在最右侧的列里面实现,这个时候有些UI 框架支持在 SFC 模板里面定义额外的 solt,当然如果不支持,更通用的…

LabVIEW实现LED显示屏视觉检测

为了满足LED显示屏在生产过程中的严格质量检测需求,引入自动化检测系统是十分必要的。传统人工检测方式存在检测强度高、效率低、准确性差等问题,自动化检测系统则能显著提高检测效率和准确性。视觉检测系统的构建主要包含硬件和软件两个部分。 视觉系统…

新兴市场游戏产业爆发 传音以技术抢抓机遇 ​

随着年轻人口的增加以及互联网的普及,非洲、中东等新兴市场正迎来游戏产业的大爆发,吸引着全球游戏企业玩家在此开疆辟土。中国出海企业代表传音以新兴市场需求为中心,秉持本地化创新理念不断加强游戏等关键领域技术攻关凭借移动终端设备为全球玩家带来极致游戏体验,收获了消费…

谷粒商城实战笔记-26-分布式组件-SpringCloud-Gateway网关核心概念原理

微服务架构中,API网关扮演着至关重要的角色,它不仅作为微服务间的通信桥梁,还负责安全、监控、限流等职责。 一,网关的发展历程 SpringCloud的网关经历了两代的迭代和更替。 第一代网关是早期的Zuul,由 Netflix 开发…

kafka 消费者

消费者 消费者。消费者连接到Kafka上并接收消息,进而进行相应的业务逻辑处理。 消费组 消费者负责订阅Kafka中的主题,并且从订阅的主题上拉取消息。 消费组:每个消费者都有一个对应的消费组,每一个分区只能被一个消费组中的一个…

深入了解Rokid UXR2.0 SDK内置的Unity AR Glass开发组件

本文将了解到Rokid AR开发组件 一、RKCameraRig组件1.脚本属性说明2.如何使用 二、PointableUI组件1.脚本属性说明2.如何使用 三、PointableUICurve组件1.脚本属性说明2.如何使用 四、RKInput组件1.脚本属性说明2.如何使用 五、RKHand组件1.脚本属性说明2.如何使用3.如何禁用手…