-
GCC -E选项 对源程序做预处理运作
所属栏目:[语言] 日期:2022-07-13 热度:127
通过前面的学习我们知道,根据源代码文件后缀名的不同,gcc 指令可以自行判断出该源程序是由哪种编程语言编写,从而完成由源代码到可执行代码的转换工作。考虑到本教程主要讲解如何使用 gcc 指令运行 C/C++ 程序,因此本节就以 C 语言程序为例(如下所示),[详细]
-
GCC -S项目 编译非汇编文件
所属栏目:[语言] 日期:2022-07-13 热度:164
我们知道,从 C、C++源代码生成可执行文件需要经历 4 个过程,分别为预处理、编译、汇编和链接。其中,《GCC -E选项:对源程序做预处理操作》一节以 demo.c 源程序文件为例,演示了如何使用 GCC 执行预处理操作,并生成了相应的 demo.i 预处理文件。 [root@b[详细]
-
GDB下载和安装教学
所属栏目:[语言] 日期:2022-07-12 热度:171
基于 Linux 系统的免费、开源,衍生出了多个不同的 Linux 版本,比如 Redhat、CentOS、Ubuntu、Debian 等。这些 Linux 发行版中,有些默认安装有 GDB 调试器,但有些默认不安装。 判断当前 Linux 发行版是否安装有 GDB 的方法也很简单,就是在命令行窗口中执[详细]
-
gdb run r 命令 开启程序
所属栏目:[语言] 日期:2022-07-12 热度:114
使用 GDB 调试器调试程序的过程,其实就是借助 GDB 调试器来监控程序的执行流程,进而发现程序中导致异常或者 Bug 的代码。通过前面章节的学习,读者已经学会了如何启动 GDB 调试器,在此基础上,本节继续为大家讲解如何在 GDB 调试器中启动(运行)程序,以[详细]
-
GDB break b 设定断点
所属栏目:[语言] 日期:2022-07-12 热度:60
默认情况下,程序不会进入调试模式,代码会瞬间从开头执行到末尾。要想观察程序运行的内部细节(例如某变量值的变化情况),可以借助 GDB 调试器在程序中的某个地方设置断点,这样当程序执行到这个地方时就会停下来。 所谓断点(BreakPoint),读者可以理解[详细]
-
GDB watch命令 监控变量值的更变
所属栏目:[语言] 日期:2022-07-12 热度:188
《GDB break命令》一节,给大家介绍了使用 break 命令在程序某一行的位置打断点。但还有一些场景,我们需要监控某个变量或者表达式的值,通过值的变化情况判断程序的执行过程是否存在异常或者 Bug。这种情况下,break 命令显然不再适用,推荐大家使用 watch[详细]
-
GCC -o选项 特定输出文件
所属栏目:[语言] 日期:2022-07-12 热度:100
gcc -o选项用来指定输出文件,如果不使用 -o 选项,那么将采用默认的输出文件。例如默认情况下,生成的可执行文件的名字默认为 a.out。 如下是 gcc -o 指令的使用语法格式: [root@bogon demo]# gcc [-E|-S|-c] [infile] [-o outfile] 其中,用方括号 [] 括[详细]
-
GCC -l选项 手动增加链接库
所属栏目:[语言] 日期:2022-07-12 热度:79
链接器把多个二进制的目标文件(object file)链接成一个单独的可执行文件。在链接过程中,它必须把符号(变量名、函数名等一些列标识符)用对应的数据的内存地址(变量地址、函数地址等)替代,以完成程序中多个模块的外部引用。 而且,链接器也必须将程序[详细]
-
gcc指令一次处置多个文件
所属栏目:[语言] 日期:2022-07-12 热度:180
通过前面几节的学习,读者已经了解了如何使用 gcc(g++)指令调用 GCC 编译器编译(包括预处理、编译、汇编和链接)C 或者 C++ 源代码,例如: [root@bogon demo]# ls demo1.c demo2.c [root@bogon demo]# cat demo1.c #includestdio.h int main(){ printf(G[详细]
-
GCC运用静态链接库和动态链接库
所属栏目:[语言] 日期:2022-07-12 热度:56
我们知道,C、C++程序从源文件到生成可执行文件需经历 4 个阶段,分别为预处理、编译、汇编和链接,本节将重点围绕链接阶段,对静态链接库和动态链接库做详细的讲解。 有关链接操作的具体细节,感兴趣的读者可阅读《到底什么是链接,它起到了什么作用?》和[详细]
-
GCC -c选择 生成目标文件
所属栏目:[语言] 日期:2022-07-12 热度:119
我们知道,从 C、C++源代码生成可执行文件要经历 4 个过程,分别为预处理、编译、汇编和链接。 《GCC -E选项:对源程序做预处理操作》一节以 demo.c 源文件为例,介绍了如何对源文件进行预处理,并生成相应的 demo.i 预处理文件;《GCC -S选项:编译非汇编文[详细]
-
socket是啥 套接字是什么
所属栏目:[语言] 日期:2022-07-11 热度:137
网络编程就是编写程序使两台联网的计算机相互交换数据。这就是全部内容了吗?是的!网络编程要比想象中的简单许多。 我们把插头插到插座上就能从电网获得电力供应,同样,为了与远程计算机进行数据传输,需要连接到因特网,而 socket 就是用来连接到因特网的[详细]
-
套接字有哪些类别 socket有哪些类型
所属栏目:[语言] 日期:2022-07-11 热度:181
这个世界上有很多种套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)、CCITT X.25地址(X.25 套接字)等。但本教程只讲第一种套接字Internet 套接字,它是最具代表性的,也是最经典最常用的。以后我们提及套[详细]
-
OSI网络七层模型简明教案
所属栏目:[语言] 日期:2022-07-11 热度:184
如果你读过计算机专业,或者学习过网络通信,那你一定听说过 OSI 模型,它曾无数次让你头大。OSI 是 Open System Interconnection 的缩写,译为开放式系统互联。 给数据加包装的过程,实际上就是在数据的头部增加一个标志(一个数据块),表示数据经过了这一[详细]
-
IP、MAC和端口号 网络通信中确认身份信息的几元素
所属栏目:[语言] 日期:2022-07-11 热度:167
在茫茫的互联网海洋中,要找到一台计算机非常不容易,有三个要素必须具备,它们分别是 IP 地址、MAC 地址和端口号。 IP地址 IP地址是 Internet Protocol Address 的缩写,译为网际协议地址。 目前大部分软件使用 IPv4 地址,但 IPv6 也正在被人们接受,尤其[详细]
-
Linux下的socket演练程序
所属栏目:[语言] 日期:2022-07-11 热度:129
和C语言教程一样,我们从一个简单的Hello World!程序切入 socket 编程。 本节演示了 Linux 下的代码,server.cpp 是服务器端代码,client.cpp 是客户端代码,要实现的功能是:客户端从服务器读取一个字符串并打印出来。 服务器端代码 server.cpp: #include[详细]
-
Windows之socket演示程序
所属栏目:[语言] 日期:2022-07-11 热度:142
上节演示了 Linux 下的 socket 程序,这节来看一下 Windows 下的 socket 程序。同样,server.cpp 为服务器端代码,client 为客户端代码。 服务器端代码 server.cpp: #include stdio.h #include winsock2.h #pragma comment (lib, ws2_32.lib) //加载 ws2_32[详细]
-
socket 函数用法详解 创造套接字
所属栏目:[语言] 日期:2022-07-11 热度:106
不管是 Windows 还是 Linux,都使用 socket() 函数来创建套接字。socket() 在两个平台下的参数是相同的,不同的是返回值。 在《socket是什么》一节中我们讲到了 Windows 和 Linux 在对待 socket 方面的区别。 Linux 中的一切都是文件,每个文件都有一个整数[详细]
-
多路平衡归并排序 胜者树 败者树 算法细说
所属栏目:[语言] 日期:2022-07-11 热度:99
通过上一节对于外部排序的介绍得知:对于外部排序算法来说,其直接影响算法效率的因素为读写外存的次数,即次数越多,算法效率越低。若想提高算法的效率,即减少算法运行过程中读写外存的次数,可以增加 k 路平衡归并中的 k 值。 但是经过计算得知,如果毫无[详细]
-
置换选择排序算法说明
所属栏目:[语言] 日期:2022-07-11 热度:72
上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值。 m 的求值方法为:m=n/l(n 表示为外部文件中的记录数,l 表示初始归并段中包含的记录数[详细]
-
最佳归并树解析
所属栏目:[语言] 日期:2022-07-11 热度:182
通过上一节对置换-选择排序算法的学习了解到,通过对初始文件进行置换选择排序能够获得多个长度不等的初始归并段,相比于按照内存容量大小对初始文件进行等分,大大减少了初始归并段的数量,从而提高了外部排序的整体效率。 本节带领大家思考一个问题:无论[详细]
-
数据结构的图存储框架
所属栏目:[语言] 日期:2022-07-10 热度:191
我们知道,数据之间的关系有 3 种,分别是 一对一、一对多 和 多对多,前两种关系的数据可分别用线性表和树结构存储,本节学习存储具有多对多逻辑关系数据的结构图存储结构。 图存储结构基本常识 弧头和弧尾 有向图中,无箭头一端的顶点通常被称为初始点或弧[详细]
-
何为连通图 强 连通图详解
所属栏目:[语言] 日期:2022-07-10 热度:93
前面介绍了《图存储结构》,本节继续讲解什么是连通图。 前面讲过,图中从一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通着的。例如图 1 中,虽然 V1 和 V3 没有直接关联,但从 V1 到 V3 存在两条路径,分别是 V1-V2-V3 和 V1-V4-V3,因此[详细]
-
什么是生成树 生成树 生成森林 解说
所属栏目:[语言] 日期:2022-07-10 热度:106
在学习连通图的基础上,本节学习什么是生成树,以及什么是生成森林。 对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树。 连通图中,由于任意两顶点之间可能含有多条通路,遍历连通图的方式有多种,往往一张连通图可能有[详细]
-
图的顺序存储结构 包括C语言实现
所属栏目:[语言] 日期:2022-07-10 热度:66
使用图结构表示的数据元素之间虽然具有多对多的关系,但是同样可以采用顺序存储,也就是使用数组有效地存储图。 使用数组存储图时,需要使用两个数组,一个数组存放图中顶点本身的数据(一维数组),另外一个数组用于存储各顶点之间的关系(二维数组)。 存[详细]