-
make命令参数和选项大合集
所属栏目:[语言] 日期:2022-07-15 热度:69
我们在在执行 make 命令时,有的时候需要加上一下参数选项来保证我们的程序的执行,其实之前已经遇到过 make 在执行命令的时候需要添加上参数选项,比如只打印命令但不执行使用的参数是 -n ,还有只执命令不打印命令的参数选项是 -s,包含其它文件的路径参数[详细]
-
Makefile目标类别大汇总
所属栏目:[语言] 日期:2022-07-15 热度:156
这个章节主要讲解的是模式规则中的目标。规则中的目标形式是多种多样的,它可以是一个或多个的文件、可以是一个伪目标,这是我们之前讲到过的,也是经常使用的。其实规则目标还可以是其他的类型,下面是对这些类型的详细的说明。 强制目标 如果一个目标中没[详细]
-
Makefile变量的高级用处
所属栏目:[语言] 日期:2022-07-15 热度:173
我们之前已经学习过变量的定义和基本的赋值运算,我们可以更深入的了解一下变量的一些高级的用法。高级使用方法有两种:一种是变量的替换引用,一种是变量的嵌套引用。这是我们在使用的时候比较常见的两种使用方法,我们来具体分析使用一下变量的这两种高级[详细]
-
C++ 11是什么 C++ 11标准的原由
所属栏目:[语言] 日期:2022-07-13 热度:92
C++ 这门编程语言的历史可以追溯至 1979 年,当时的 Bjarne Stroustrup(C++ 之父,后续简称 Stroustrup)还在使用 Simula 语言进行开发工作。 Simula 语言被认为是第一个面向对象的编程语言。Stroustrup 也非常赞赏 Simula 语言的这种特性,但由于实例开发[详细]
-
C++ auto类型推导完全策略
所属栏目:[语言] 日期:2022-07-13 热度:106
在 C++11 之前的版本(C++98 和 C++ 03)中,定义变量或者声明变量之前都必须指明它的类型,比如 int、char 等;但是在一些比较灵活的语言中,比如 C#、JavaScript、PHP、Python 等,程序员在定义变量时可以不指明具体的类型,而是让编译器(或者解释器)自[详细]
-
C++ decltype类型推导完全战略
所属栏目:[语言] 日期:2022-07-13 热度:163
decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导。不了解 auto 用法的读者请转到《C++ auto》。 decltype 是declare type的缩写,译为声明类型。 既然已经有了 auto 关键字,为什么还需要 decltype 关键字呢?[详细]
-
C++返回值类型后置 跟踪返回值类别
所属栏目:[语言] 日期:2022-07-13 热度:170
在泛型编程中,可能需要通过参数的运算来得到返回值的类型。考虑下面这个场景: template typename R, typename T, typename U R add(T t, U u) { return t+u; } int a = 1; float b = 2.0; auto c = adddecltype(a + b)(a, b); 我们并不关心 a+b 的类型是什[详细]
-
C++11运用using定义别名 替代typedef
所属栏目:[语言] 日期:2022-07-13 热度:76
大家都知道,在 C++ 中可以通过 typedef 重定义一个类型: typedef unsigned int uint_t; 被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。因此,下面这样将不是合法的函数重载: void func(unsigned int); void func(uint_t); // e[详细]
-
链接库是啥 动态链接库和静态链接库
所属栏目:[语言] 日期:2022-07-13 热度:140
静态链接库和动态链接库是最常用的两种共享代码的方法,从本节开始,您将系统地了解它们,并彻底搞清楚以下问题: 什么是库,什么是链接库,以及静态链接库和动态链接库的区别; 如何手动创建一个静态或者动态链接库; 如何在自己的项目中使用第三方提供的静[详细]
-
首个多线程程序
所属栏目:[语言] 日期:2022-07-13 热度:139
通过阅读《什么是线程》一节,我们了解了什么是线程以及什么是多线程。本节,我们教大家编写第一个多线程程序。 大多数操作系统都支持同时执行多个程序,包括常见的 Windows、Linux、Mac OS X 操作系统等。为了避免多个程序访问系统资源(包括文件资源、I/O[详细]
-
Makefile控制函数error与warning
所属栏目:[语言] 日期:2022-07-13 热度:191
Makefile 中提供了两个控制 make 运行方式的函数。其作用是当 make 执行过程中检测到某些错误时为用户提供消息,并且可以控制 make 执行过程是否继续。这两个函数是 error 和 warning,我们来详细的介绍一下这两个函数。 $(error TEXT...) 函数说明如下: 函[详细]
-
Makefile中寻常的错误信息
所属栏目:[语言] 日期:2022-07-13 热度:58
make 执行过程中所产生错误并不都是致命的,特别是在命令行之前存在 -、或者 make 使用 -k 选项执行时。make 执行过程的致命错误都带有前缀字符串 ***。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是 make);另外一种是当 Makefile 本身存在语法[详细]
-
Makefile文件中包括哪些规则
所属栏目:[语言] 日期:2022-07-12 热度:65
想要书写一个完整的 Makefile文件,需要了解 Makefile 的相关的书写规则。我们已经知道了 Makefile 描述的是文件编译的相关规则,它的规则主要是两个部分组成,分别是依赖的关系和执行的命令,其结构如下所示: targets : prerequisites command 或者是 targ[详细]
-
Makefile的工作进程
所属栏目:[语言] 日期:2022-07-12 热度:53
简单了解一下 Makefile 书写规则之后,再来深入研究一下 Makefile 的是怎样工作的?当我们在执行 make 条命令的时候,make 就会去当前文件下找要执行的编译规则,也就是 Makefile 文件。我们编写 Makefile 的时可以使用的文件的名称 GNUmakefile 、makefile[详细]
-
Makefile通配符的利用
所属栏目:[语言] 日期:2022-07-12 热度:174
Makefile 是可以使用 shell 命令的,所以 shell 支持的通配符在 Makefile 中也是同样适用的。 shell 中使用的通配符有:*,?,[...]。具体看一下这些通配符的表示含义和具体的使用方法。 通配符 使用说明 * 匹配0个或者是任意个字符 ? 匹配任意一个字符 [][详细]
-
Makefile变量的定义和运用
所属栏目:[语言] 日期:2022-07-12 热度:137
变量对于我们来说是不陌生的,在学习各种编程语言时会经常用到。就拿C语言来说,变量的使用是十分常见的,变量可以用来保存一个值或者是使用变量进行运算操作。Makefile 中的变量也是这样,我们可以利用它来表示某些多处使用而又可能发生变化的内容,不仅可[详细]
-
Makefile自主化变量
所属栏目:[语言] 日期:2022-07-12 热度:132
关于自动化变量可以理解为由 Makefile 自动产生的变量。在模式规则中,规则的目标和依赖的文件名代表了一类的文件。规则的命令是对所有这一类文件的描述。我们在 Makefile 中描述规则时,依赖文件和目标文件是变动的,显然在命令中不能出现具体的文件名称,[详细]
-
Makefile目标文件搜寻 VPATH和vpath
所属栏目:[语言] 日期:2022-07-12 热度:102
我们都知道一个工程文件中的源文件有很多,并且存放的位置可能不相同(工程中的文件会被放到不同的目录下),所以按照之前的方式去编写 Makefile 会有问题。 我们之前列举的例子,所有的源文件基本上都是存放在与 Makefile 相同的目录下。只要依赖的文件存在[详细]
-
Makefile路径搜索使用示例
所属栏目:[语言] 日期:2022-07-12 热度:193
我们了解了一下路径搜索的使用方式,我们再来看一下具体的使用方法。 为了体验实例的效果的更加明显,我们按照源代码树的布局来放置文件。我们把源代码放置在src目录下,包含的文件文件是:list1.c、list2.c、main.c 文件,我们把头文件包含在 include 的目[详细]
-
Makefile隐含准则
所属栏目:[语言] 日期:2022-07-12 热度:164
这个章节讲述的是 Makefile 的隐含规则,所谓的隐含规则就是需要我们做出具体的操作,系统自动完成。编写 Makefile 的时候,可以使用隐含规则来简化Makefile 文件编写。 实例: test:test.o gcc -o test test.o test.o:test.c 我们可以在 Makefile 中这样写[详细]
-
Makefile ifeq ifneq ifdef和ifndef 条件判别
所属栏目:[语言] 日期:2022-07-12 热度:192
日常使用 Makefile 编译文件时,可能会遇到需要分条件执行的情况,比如在一个工程文件中,可编译的源文件很多,但是它们的类型是不相同的,所以编译文件使用的编译器也是不同的。手动编译去操作文件显然是不可行的(每个文件编译时需要注意的事项很多),所[详细]
-
Makefile伪标准
所属栏目:[语言] 日期:2022-07-12 热度:161
这一个章节我们主要讲的是 Makefile 中的伪目标。所谓的伪目标可以这样来理解,它并不会创建目标文件,只是想去执行这个目标下面的命令。伪目标的存在可以帮助我们找到命令并执行。 使用伪目标有两点原因: 避免我们的 Makefile 中定义的只执行的命令的目标[详细]
-
socket缓冲区以及阻塞模式说明
所属栏目:[语言] 日期:2022-07-11 热度:147
在《socket数据的接收和发送》一节中讲到,可以使用 write()/send() 函数发送数据,使用 read()/recv() 函数接收数据,本节就来看看数据是如何传递的。 socket缓冲区 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。 write()/send() 并[详细]
-
TCP协议的粘包难题 数据的无边界性
所属栏目:[语言] 日期:2022-07-11 热度:62
上节我们讲到了socket缓冲区和数据的传递过程,可以看到数据的接收和发送是无关的,read()/recv() 函数不管数据发送了多少次,都会尽可能多的接收数据。也就是说,read()/recv() 和 write()/send() 的执行次数可能不同。 例如,write()/send() 重复执行三次[详细]
-
图解TCP数据报结构以及三次握手 很详细
所属栏目:[语言] 日期:2022-07-11 热度:183
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。 客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、[详细]