当前位置:   article > 正文

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

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


在这里插入图片描述

翻译环境和运行环境

翻译环境

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

进行编译和链接过程。

在这里插入图片描述

.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 贪吃蛇");
  • 1
  • 2

控制台获取坐标COORD

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

typedef struct _COORD{
	SHORT X;
	SHORT Y;
}COORD,*PCOORD;
  • 1
  • 2
  • 3
  • 4

GetStdHandle函数

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

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

GetConsoleCursorinfo函数

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

HANDLE hOutPut = NULL;//初始一个句柄
//获得标准输出的句柄
hOutPut = GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorinfo(hOutPut,&CursorInfo);//获取光标信息
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

CONSOLE_CURSOR_INFO

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

typedef struct CONSOLE_CURSOR_INFO{
	DWORD dwSize;
	BOOL bVisible;
}CONSOLE_CURSOR_INFO,*PCONSOLE_CURSOR_INFO;
  • 1
  • 2
  • 3
  • 4

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

SetConsoleCursorInfo函数

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

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

SetConsoleCursorPostion函数

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

COORD pos = {10,5};
HANDLE hOutPut = NULL;
hOutPut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPostion(hOutPut,pos);
  • 1
  • 2
  • 3
  • 4

GetAsyncKeyState函数

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/888933
推荐阅读
相关标签
  

闽ICP备14008679号