自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 C语言解决error expected parentheses around type name in sizeof expression问题

C语言解决error expected parentheses around type name in sizeof expression问题

2022-08-27 14:40:38 467 1

原创 C++类模板

C++类模板第二节:类模板,变量模板,别名模板类模板的基本范例和模板参数的推断**类模板:**是产生类的模具,通过给定的模板参数,生成具体的类,也就是实例化一个特定的类。比如:vector,引入类模板的目的,减少代码冗余基本范例namespace _nmsp1{ //类模板定义 template <typename T> // T是类型模板参数,表示myvector这个容器所保存的元素类型,typename和 // c

2021-09-13 21:43:30 246

原创 C++函数模板

C++函数模板第一节-函数模板模板的定义是以template关键字开头;类型模板参数T前面用typename来修饰,所以,遇到typename就该知道其后面跟的是一个类型。typename可以被class取代,但此处的class并没有“类”;类型模板参数T(代表是一个类型)以前前面的修饰符typename/class都用<>括起来T这个名字可以换成任意其他标识符,对程序没有影响。用T只是一种编程习惯。例子:namespace _nmsp1{ int Sub(int tv1,

2021-09-12 23:14:17 286

原创 侯捷-C++面向对象高级开发(上)-String类实现

String类实现String.h#ifndef __MY_STRING_H__#define __MY_STRING_H__#include <cstring>#include <iostream>class String{public: String(const char *cstr = 0); String(const String &str); String &operator=(const String &

2021-07-26 22:31:11 329 1

原创 侯捷-C++面向对象高级开发(上)-complex类实现

complex类实现comlex.h头文件#ifndef __COMPLEX_H__#define __COMPLEX_H__class complex;complex& __doapl(complex* ths, const complex& r);complex& __doami(complex* ths, const complex& r);complex& __doaml(complex* ths, const com

2021-07-21 23:57:04 266 1

原创 C语言解决网络数据传输缓冲区大小不确定的问题

C语言解决网络数据传输缓冲区大小不确定的问题背景在项目开发中,我们常常遇到这样的状况:网络通信时使用的数据缓冲大小不确定。需要我们动态开辟数据缓冲的空间;解决方案使用GUN C扩展的零长数组尽管零长度数组的大小为零,但由于尾部填充,这种类型的数组成员可能会增加封闭类型的大小。零长度数组成员距封闭结构开头的偏移量与具有一个或多个相同类型元素的数组的偏移量相同。零长度数组的对齐方式与其元素的对齐方式相同。代码实现#include <stdio.h>#include <stdli

2021-07-19 23:14:02 397 1

原创 C语言解决free invalid pointer 导致的core dumped问题引发的思考

C语言解决free invalid pointer 导致的core dumped问题背景在公司的项目中,编译运行后出来free invalid pointer的问题,导致程序运行直接段错误。出现问题的代码片段#include <stdio.h>#include <stdlib.h>#include <string.h>int main() { char * test_data = (char*)malloc(24); if (test_data ==

2021-07-13 23:04:58 8693 1

原创 SQLite解决插入大量数据速度慢的问题

SQLite解决插入大量数据速度慢的问题背景在重构公司项目中发现,公司以前代码中将大量数据插入SQLite数据库,速度非常慢,几千条居然需要将近1分钟;解决方法知识背景事务(Transaction)是一个对数据库执行工作单元。事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作完成,也可以是由某种数据库程序自动完成。事务(Transaction)是指一个或多个更改数据库的扩展。例如,如果您正在创建一个记录或者更新一个记录或者从表中删除一个记录,那么您正在该表上执行事

2021-07-11 09:17:02 3134

原创 SQLite解决插入特殊字符导致插入失败的问题

SQLite解决插入特殊字符导致插入失败的问题背景在使用SQLite数据库时,我们经常会遇到插入的数据里面有单引号之类的特殊字符,如果不能正确处理,会导致插入数据失败。解决方法方法一对特殊字符进行转义INSERT INTO time VALUES('5 O''clock');# 插入的数据是5 O'clock缺点需要每次添加转义字符,单条或数据量比较小的时候比较方便;数据量比较大的时候需要每次去遍历数据,然后转义,不方便也比较麻烦;方法二使用SQLite内置的格式化字符串c

2021-07-11 08:46:45 3998 1

原创 工厂模式(Factory Pattern)之简单工厂

工厂模式(Factory Pattern)之简单工厂简单工厂模式(Simple Factory)用途工厂模式:通过把创建对象的代码包装起来,做到创建对象的代码与具体的业务逻辑代码相隔离的目的。简单工厂模式:定义一个工厂类(MonsterFactory),该类的成员函数(createMonster)可以根据不同参数创建并返回不同的类对象,被创建的对象所属的类(M_Undead,M_Element,M_Mechanic)一般都具有相同的父类(Monster),调用者(这里指main函数)无需关心创建

2021-07-10 20:56:29 110

原创 模板方法(Template Method)模式

模板方法(Template Method)模式用途模板方法:在步骤确定且固定的情况下,通过多态机制在多个子类中对每个步骤的细节进行差异化实现,这是模板方法能够达到的效果;分类模板方法模式:在设计模式中属于行为型模式;具体例子A公司有一个小游戏项目组——开发单机闯关打斗类游戏(类似街机打拳类游戏)。一个游戏项目组最少需要三名担任不同角色的员工组成:游戏策划,游戏程序,游戏美术游戏策划:简称策划 ,负责提出游戏的各种玩法需求,确定游戏中各种数值比如人物(敌人)的生命值、魔法值。游戏程序

2021-07-10 16:23:24 117

原创 CMake Error: CMake was unable to find a build program corresponding to “Ninja“.

CMake Error: CMake was unable to find a build program corresponding to “Ninja”.使用cmake -G ninja ..后出现问题,报错信息如下所示:CMake Error: CMake was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is not set. You probably need to select a

2021-05-01 17:21:26 8158

原创 第十五课:make的隐式规则(上)

make的隐式规则(上)问题如果同一目标的命令拆分的写到不同地方,会发生什么?下面的程序怎么执行?为什么?.PHONY : allall : @ehco "command-1"VAR := testall : @echo "all : $(VAR)"实验截图makefile中出现同名目标时依赖:所有的依赖将合并在一起,成为目标的最终依赖命令:当多处出现同一目标的命令时,make发出警告所有之前定义的命令被最终的命令取代注意事项当使用in

2021-04-29 23:38:50 135

原创 第十四课:自动生成依赖关系(续)

自动生成依赖关系(下续)疯狂想法的具体实现注意事项当.dep文件生成后,如果动态的改变头文件间的依赖关系,那么make可能无法检测到这个改变,进而做出错误的编译解决方案将依赖文件名作为目标加入自动生成的依赖关系中通过include加载依赖文件时判断是否执行规则在规则执行时重新生成依赖关系文件最后加载新的依赖文件编程实验.PHONY : all clean rebuildMKDIR := mkdirRM := rm -rfCC := gccDIR_DEPS := d

2021-04-28 22:29:47 94

原创 第十三课:自动生成依赖关系(下)

自动生成依赖关系(下)问题​ 如何在makeifle中组织.dep文件到指定目录?解决思路当include发现.dep文件不存在:通过规则和命令创建deps文件将所有.dep文件创建到deps文件夹.dep文件中记录目标文件的依赖关系代码的初步设计$(DIR_DEPS) : $(MKDIR)$@$(DIR_DEPS)/%.dep : $(DIR_DEPS) %.c @echo "Creating $@ ..." @set -e; \ $(CC) -MM -E $(f

2021-04-12 20:29:46 103

原创 第十二课:自动生成依赖关系(中)

自动生成依赖关系(中)makefile中的include关键字类似C语言中的include将其它文件的内容原封不动的搬入到当前文件make对include关键字的处理方式在当前目录搜索或指定目录搜索目标文件搜索成功:将文件内容搬入当前makefile中搜索失败:产生警告以文件名作为目标查找并执行对应规则当文件名对应的规则不存在时,最终产生错误下面代码怎么执行?为什么?.PHONY : allinclude test.txtall : @echo "th

2021-04-06 21:59:02 106

原创 第十一课:自动生成依赖关系(上)

自动生成依赖关系(上)值得思考的问题目标文件(.o)是否只依赖于源文件(.c)?编译器如何编译源文件和头文件?编译行为带来的缺陷预处理将头文件中的代码直接插入到源文件编译器只通过预处理后的源文件产生目标文件因此:源文件以源文件为依赖,命令可能无法执行下面的makefile是否有问题OBJS := fun.o main.ohello.out : $(OBJS) @gcc -o $@ $^ @echo "Target File ==> $@"$(OBJS)

2021-04-03 21:58:56 178

原创 第十课:变量与函数的综合示例

变量与函数的综合示例实战需求自动生成target文件夹存放可执行文件自动生成objs文件夹存放编译生成的目标文件(*.o)支持调试版本的编译选项考虑代码的拓展性工具原料$(wildcard _pattern)获取当前工作目录中满足_pattern的文件或目录列表$(addprefix _prefix, _names)给名字列表_names中的每个名字增加前缀_preix关键技巧自动获取当前目录下的源文件列表(函数调用)SRCS := $(wildca

2021-04-02 23:18:44 127

原创 第九课:函数定义及调用

函数定义及调用makefile中支持函数的概念make解释器提供了一系列的函数供makefile调用在makefile中支持自定义函数实现,并调用执行通过define关键字实现自定义函数自定义函数的语法# 函数定义define func1 @echo "My name is $(0)"endefdefine func2 @echo "My name is $(0)" @echo "Param => $(1)"# 函数调用test : $(call func1)

2021-03-31 21:31:16 146

原创 第八课:条件判断语句

条件判断语句条件判段语句注意事项条件判断语句只能用于控制make实际执行的语句;但是,不能控制规则中命令的执行过程条件判断语句的语法说明常见形式ifxxx (arg1, arg2)其它合法形式ifxxx “arg1” “arg2”ifxxx ‘arg1’ ‘arg2’ifxxx “arg1” ‘arg2’ifxxx ‘arg1’ “arg2”小贴士ifxxx (arg1,arg2)# if前面,xxx后面和(arg1,arg2)后面都可以使用

2021-03-30 19:21:03 475

原创 第七课:变量的高级主题(下)

变量的高级主题(下)环境变量(全局变量)makfile中能够直接使用环境变量的值定义了同名变量,环境变量将被覆盖运行make时指定"-e"选项,优先使用环境变量为什么要在makefile中使用环境变量?优势环境变量可以在所有的makefile中使用劣势过多的依赖于环境变量会导致移植性降低变量在不同makefile之间的传递方式直接在外部定义环境变量进行传递使用export定义变量进行传递(定义临时环境变量)定义make命令行变量进行传递(推荐)

2021-03-28 21:47:41 201 2

原创 第六课:变量的高级主题(上)

变量的高级主题(上)变量值的替换使用指定字符(串)替换变量值中的后缀字符(串)语法格式:(var:a=b)或(var:a=b)或(var:a=b)或{var:a=b}替换表达式中不能有任何空格make中支持使用${}对变量进行取值src := a.cc b.cc c.ccobj := $(src:cc=o)test: @echo "obj => $(obj)"规则中的模式替换targets : target-pattern : prereq-pattern co

2021-03-18 23:09:31 135

原创 第五课:预定义变量的使用

预定义变量的使用在makefile中存在一些预定义的变量自动变量$@, $^, $<特殊变量 自动变量的意义$@当前规则中触发命令被执行的目标$^当前规则中所有依赖$<当前规则中的第一个依赖预定义变量的使用自动变量的使用示例all : first second third @echo "\$$@ => $@" @echo "$$^ => $^" @echo "$$< => $<"实验截图

2021-03-17 22:50:30 224

原创 第四课:变量和不同的赋值方式

变量和不同的赋值方式makefile支持程序设计语言中变量的概念。但makefile里面的变量代表文本数据(即字符串)。makefile中的变量命名规则和C语言中相似。变量名可以包含字符、数字、下划线。不能包含":"、"#"、"=“或” "。变量名大小写敏感。变量的定义和使用:CC := gcc # 变量定义TARGET := hello.out # 变量定义$(TARGET) : func.o main.o # $(var) 变量使用 $

2021-03-16 23:22:59 256

原创 第三课:伪目标的引入

伪目标的引入思考一下makefile中的目标究竟是什么?在默认情况下:make将makefile的目标认为是一个文件;make比较目标文件和依赖文件的新旧关系,决定是否执行命令;make以文件处理作为第一优先级。编程实验:有趣的目标hello.out all : main.o func.o gcc -o hello.out main.o func.omain.o: main.c gcc -o main.o -c main.cfunc.o: func.c gcc -o

2021-03-15 23:17:01 202

原创 第二课:初识makefile的结构

初识makefile的结构makefile的意义makefile用于定于源文件之间的依赖关系makefile说明如何编译各个源文件并生成可执行文件# 一个最基本的依赖的规则如下:target : prerequisites ; command1'\t'command2makefile中的元素含义targets通常是需要生成的目标文件名make所需执行的命令名称(例如:all)prerequisities当前目标所依赖的其他目标或者文件command完

2021-03-14 22:57:57 221

原创 第一课:make与makfile

一.make与makefile简介1.make是什么,为什么需要make?make是一个应用程序解析源程序之间的依赖关系根据依赖关系自动维护编译工作执行宿主操作系统中的各种命令(比如Linux里面的shell脚本命令)2.makfile是什么,为什么需要makfile?makefile是一个描述文件makefile是一个描述文件定义一系列的规则来指定源文件编译的先后顺序拥有特定的语法规则,支持函数定义含函数调用能够直接集成操作系统中的各种命令3.make和makefile的关

2021-03-13 22:55:27 418

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除