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

news2024/12/24 13:05:43

目录

  • 翻译环境和运行环境
    • 翻译环境
      • 编译器
        • 预处理(预编译)
        • 编译
        • 链接
    • 执行环境
  • 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.coloradmin.cn/o/1905943.html

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

相关文章

完美解决ValueError: not enough values to unpack (expected 2, got 1)的正确解决方法,亲测有效!!!

完美解决ValueError: not enough values to unpack (expected 2, got 1)的正确解决方法,亲测有效!!! 亲测有效 完美解决ValueError: not enough values to unpack (expected 2, got 1)的正确解决方法,亲测有效&#xf…

算法设计与分析 实验5 并查集法求图论桥问题

目录 一、实验目的 二、问题描述 三、实验要求 四、实验内容 (一)基准算法 (二)高效算法 五、实验结论 一、实验目的 1. 掌握图的连通性。 2. 掌握并查集的基本原理和应用。 二、问题描述 在图论中,一条边被称…

Three.js机器人与星系动态场景(四):封装Threejs业务组件

实际在写业务的时候不会在每个组件里都写几十行的threejs的初始化工作。我们可以 将通用的threejs的场景、相机、render、轨道控制器等进行统一初始化。同时将非主体的函数提到组件外部,通过import导入进组件。将业务逻辑主体更清晰一些。下面的代码是基于reactthre…

(附源码)springboot共享单车管理系统-计算机毕设 65154

springboot共享单车管理系统 摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于共享单车管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了共享单车管理系…

Leetcode3194. 最小元素和最大元素的最小平均值

Every day a Leetcode 题目来源:3194. 最小元素和最大元素的最小平均值 解法1:排序遍历 将数组 nums 排序后,利用双指针计算每一对 (minElement maxElement) / 2,最小值即为答案。 代码: /** lc appleetcode.cn …

多线程网络实战之仿qq群聊的服务器和客户端

目录 一、前言 二、设计需求 1.服务器需求 2.客户端需求 三、服务端设计 1.项目准备 2.初始化网络库 3.SOCKET创建服务器套接字 4. bind 绑定套接字 5. listen监听套接字 6. accept接受客户端连接 7.建立套接字数组 8. 建立多线程与客户端通信 9. 处理线程函数&…

iptables实现端口转发ssh

iptables实现端口转发 实现使用防火墙9898端口访问内网front主机的22端口(ssh连接) 1. 防火墙配置(lb01) # 配置iptables # 这条命令的作用是将所有目的地为192.168.100.155且目标端口为19898的TCP数据包的目标IP地址改为10.0.0.148,并将目标…

【Java】垃圾回收学习笔记(一):Root Search 根可达算法+垃圾回收的起点

文章目录 1. 引用计数法优点缺点 2. 可达性分析 Root Search2.1 那些对象是GC Roots2.2 引用的分类2.3 回收方法区 3. 实现细节3.1 GC的起点:节点枚举OopMap:帮助高效的根节点枚举 3.2 何时开始GC:安全点与安全区域如何选取安全点如何让程序进…

数据驱动的内容优化:Kompas.ai如何提升内容表现

在数字化营销时代,内容是企业与用户沟通的重要桥梁。然而,随着信息量的爆炸性增长,如何让内容在激烈的竞争中脱颖而出,成为每个营销人员面临的问题。数据驱动的内容优化策略,通过精准分析和科学决策,帮助品…

华为OD机试 - 员工派遣(Java 2024 D卷 200分)

华为OD机试 2024D卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测…

基于字典学习的地震数据降噪(MATLAB R2021B)

稀疏表示基于研究者们提出了许多变换基函数的方法逐渐成型,比如小波域,曲波域,dreamlet 域等,其原理是利用地震信号在变换域内的稀疏性和可分离性以去除噪声。继 Donoho发表非线性去噪方法-小波阈值萎缩方法,在后续的研…

Swift 中 map 和 flatMap 的区别 (入门版)

在 Swift 中,map 和 flatMap 是用于处理集合类型(如数组、字典、集合等)的两个重要方法。尽管它们看起来相似,但它们在处理集合中的元素和结果时有着不同的行为。 map 方法 map 方法会对集合中的每一个元素应用一个变换&#xff…

C++ 面试宝典之:空类大小究竟是不是 0?

以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/pD4bIjX2kDzo8gbYRPktPQ 首先,空类是什么?空类指的是不包含任何数据成员的类,但可能包含方法成员。 实例化时…

Redis常用命令——Set、Zset篇

文章目录 一、Set相关命令操作 SADD SMEMBERS SISMEMBER SCARD SPOP SMOVE SREM SINTER 与 SINTERSTORE SUNION 与 SUNIONSTORE SDIFF 与 SDIFFSTORE Set命令小结 二、Zset 相关命令操作 ZADD ZCARD ZCOUNT ZRANGE ZREVRANGE ZPOPMAX BZPOPMAX ZPOPMIN 与 BZPOPMIN ZRANK 与 …

AI Earth ——开发者模式案例10:基于 CNN 的 AI 分类模型开发

基于 CNN 的 AI 分类模型开发 本案例主要介绍如何快速利用 AIE Python SDK 创建机器学习建模流程。我们主要使用到 Python SDK的Machine Learning Proxy 模块(下文简称 AieMlProxy )。该模块涵盖了一系列用户与训练集群之间的交互接口,包括:鉴权、数据加载、训练任务提交、…

OpenCV杂记(4):OpenCV之色彩映射(伪彩applyColorMap)

1. 简述 我们在开发基于热成像(红外)或者做深度估计应用时,为了便于直观的观察,常常将检测结果进行色彩上的映射,这样便可以很直观的看出哪里温度高,哪里温度低,或者哪里深度更深或更浅。 我们将…

【STM32项目】基于Stm32搞怪盒子的设计(完整工程资料)

基于stm32搞怪的盒子设计 前言: 最近我看到一个极具创意的搞怪盒子,设计得相当有意思。作为一个热衷于电子DIY的狂热爱好者,怎能错过这样一个有趣的项目呢?于是,我决定亲自动手,设计一个属于自己的、独一无…

代码随想录——单调递增的数字(Leetcode738)

题目链接 贪心 class Solution {public int monotoneIncreasingDigits(int n) {char[] digits String.valueOf(n).toCharArray();int flag digits.length;for (int i digits.length - 1; i > 0; i--) {if (digits[i] < digits[i - 1]) {flag i;digits[i - 1]--;}}…

KVM把新添加的磁盘扩容到根目录

1、对新增的磁盘进行分区&#xff08;注&#xff1a;可省略&#xff09; PS&#xff1a;使用fdisk或gdisk&#xff08;大于2T时使用&#xff09;对新增磁盘进行分区。 [rootkvm-clinet ~]# fdisk/dev/sdb Welcome to fdisk (util‐linux 2.23.2).4 Changes will remain in …

GISSERVER 管理器发布切片服务

GISSERVER 管理器 1.0(私有化地图离线部署)可以为您发布切片服务&#xff0c;切片服务的概念可以见我以前的文章&#xff1a;如何生成像谷歌高德一样的切片地图。除了我们自己制作的切片外&#xff0c;我们最常见的是利用各类地图下载器下载的在线地图的切片。见&#xff1a;栅…