C++ Primer Plus笔记
1. 预备知识1.1. 如何运行C++程序 使用文本编辑器编写程序,保存文件,这个文件就是源代码。 编译源代码。运行程序将源代码翻译为机器语言。翻译后的文件就是目标代码。 将目标代码与其他代码链接起来,生成程序的运行阶段版本。最终产品文件为可执行代码。 链接指的是将目标代码同使用的函数的目标代码以及一些标准的启动代码组合起来,生成程序的运行阶段版本 编程步骤如下图: 从4.2版起,g++要求编译源代码文件时使用标记-std=c++0x: g++ -std=C++11 use_auto.cpp 2. 开始学习C++2.1. 为什么main()不能使用其他名称?C++程序必须包含一个名为main()的函数, 这是由系统的C++运行时决定的。编译器生成目标系统的可执行文件时,操作系统的启动入口就是C++运行时,然后运行时完成初始化之后就会调用main函数(入口点)。 存在一些例外情况:比如windows上编写DLL模块,是因为DLL模块不是独立的程序。 2.2. cin不支持录入空格在C++中,用cin>>str;这种方法来接收字符串那么录入的s...
C语言宏的特殊用法和几个坑
总结一下C语言中宏的一些特殊用法和几个容易踩的坑。由于本文主要参考GCC文档,某些细节(如宏参数中的空格是否处理之类)在别的编译器可能有细微差别,请参考相应文档。 1. 宏基础宏仅仅是在C预处理阶段的一种文本替换工具,编译完之后对二进制代码不可见。基本用法如下: 1.1. 标示符别名1#define BUFFER_SIZE 1024 预处理阶段,foo = (char *) malloc (BUFFER_SIZE);会被替换成foo = (char *) malloc (1024); 宏体换行需要在行末加反斜杠\ 123#define NUMBERS 1, \ 2, \ 3 预处理阶段int x[] = { NUMBERS };会被扩展成int x[] = { 1, 2, 3 }; 1.2. 宏函数宏名之后带括号的宏被认为是宏函数。用法和普通函数一样,只不过在预处理阶段,宏函数会被展开。优点是没有普通函数保存寄存器和参数传递的开销,展开后的代码有利于CPU cache的利用和指令预测,速度快。缺点是可执行代码体...
《明解C语言》读书笔记
1. 第一章 初识C语言1.1. 转义字符1.1.1. 响铃🔔: \a 12345678#include <stdio.h>int main(void){ char *name = "Evan"; printf("Hello, %s!\a\a\a\n", name); return 0;} 1.2. 通过键盘输入和显示1.2.1. scanf123456789#include <stdio.h>int main(int argc, const char * argv[]) { int number; printf("Please input a number: \n"); scanf("%d", &number); printf("Your number is %d\n", number); return 0;} 1.2.2. puts 123456789101112#include <stdio.h>int main(int argc, const char *...
《图解编译原理》读书笔记
1. 第一章 运行时结构及编译过程1.1. 一个简单的C程序代码如下: 12345678910111213141516int fun(int a, int b);int m = 10;int main(){ int i = 4; int j = 5; m = fun(i, j); return 0;}int fun(int a, int b){ int c = 0; c = a + b; return c;} 1.2. 程序运行之前执行程序之前,我们需要对程序进行编译。 编译分为以下几个步骤: 1. 预处理: 宏定义展开、头文件展开、条件编译、在这里并不会检查语法。 2. 编译: 检查语法,将预处理后的文件编译生成汇编文件 3. 汇编: 将汇编文件生成目标文件(二进制文件) 4. 链接: 将目标文件链接为可执行文件 编译完成生成可执行文件之后,我们通过在linux下size命令可以查看一个可执行二进制文件基本情况: 通过上图可以得知,在程序没有运行前,也就是说程序没有加载到内存前,可执行程序的内部已经分好了3段信息,分别为代码区(...
图解霍夫曼编码
1. 霍夫曼编码今天来给大家普及一下霍夫曼编码(Huffman Coding),一种用于无损数据压缩的熵编码算法,由美国计算机科学家大卫·霍夫曼在 1952 年提出——这么专业的解释,不用问,来自维基百科了。 说实话,很早之前我就听说过霍夫曼编码,除了知道它通常用于 GZIP、BZIP2、PKZIP 这些常规的压缩格式中,我还知道它通常用于压缩重复率比较高的字符数据。 大家想啊,英文就 26 个字母进行的无限组合,重复率高得一逼啊!常用的汉字也不多,2500 个左右,别问我怎么知道的,我有问过搜索引擎的。 字符重复的频率越高,霍夫曼编码的工作效率就越高! 是时候,和大家一起来了解一下霍夫曼编码的工作原理啦,毕竟一名优秀的程序员要能做到知其然知其所以然——请允许我又用了一次这句快用臭了话。 假设下面的字符串要通过网络发送。 大家应该知道,每个字符占 8 个比特,上面这串字符总共有 15 个字符,所以一共要占用 15*8=120 个比特。没有疑问吧?有疑问的同学请不好意思下。 如果我们使用霍夫曼编码的话,就可以将这串字符压缩到一个更小的尺寸。怎么做到的呢? 霍夫曼编码首先会使...
探索Notion中节省时间的神器 - Button
Notion按钮可插入块、添加页面、编辑页面、打开页面等功能,帮助快速完成重复任务、管理项目,提升效率,成为节省时间的实用工具,高效使用。
Python内置方法和属性应用
1. 前言python除了丰富的第三方库外,本身也提供了一些内在的方法和底层的一些属性,大家比较常用的如dict、list、set、min、max、range、sorted等。笔者最近在做项目框架时涉及到一些不是很常用的方法和属性,在本文中和大家做下分享。 2. 内置方法和函数介绍 enumerate 如果你需要遍历可迭代的对象,有需要获取它的序号,可以用enumerate, 每一个next返回的是一个tuple 12345678list1 = [1, 2, 3, 4]list2 = [4, 3, 2, 1]for idx, value in enumerate(list1): print(idx, value, list2[idx])# 0 1 4# 1 2 3# 2 3 2# 3 4 1 zip zip从参数中的多个迭代器取元素组合成一个新的迭代器; 12345678# 给list加上序号b = [4, 3, 2, 1]for i in zip(range(len(b)), b): print(i)# (0, 4)# (1, 3)# (2, 2)...
怎么修改Logic K580的快捷键
怎么修改Logic K580的快捷键在使用Logic K580键盘的时候有时候会想要切换到默认的快捷键,使用如下的方法: 使用右边的Fn键+ESC键切换
Test with Coverage
前几天,听了公司某位大佬关于编程心得的体会,其中讲到了“测试驱动开发”,感觉自己的测试技能薄弱,因此,写下这篇文章,希望对测试能有个入门。这段时间,笔者也体会到了测试的价值,一句话,学会测试,能够让你的开发更加高效。 本文将介绍以下两个方面的内容: Test with Coverage Mock 0.1. Test with Coverage测试覆盖率通常被用来衡量测试的充分性和完整性。从广义的角度讲,主要分为两大类:面向项目的需求覆盖率和更偏向技术的代码覆盖率。对于开发人员来说,我们更注重代码覆盖率。 代码覆盖率指的是至少执行了一次的条目数占整个条目数的百分比。如果条目数是语句,对应的就是代码行覆盖率;如果条目数是函数,对应的就是函数覆盖率;如果条目数是路径,对应的就是路径覆盖率,等等。统计代码覆盖率的根本目的是找出潜在的遗漏测试用例,并有针对性的进行补充,同时还可以识别出代码中那些由于需求变更等原因造成的废弃代码。通常我们希望代码覆盖率越高越好,代码覆盖率越高越能说明你的测试用例设计是充分且完备的,但测试的成本会随着代码覆盖率的提高而增加。 在Python中,cover...
Python面向对象编程
1. Python 面向对象编程面向对象程序设计思想,首先思考的不是程序执行流程,它的核心是抽象出一个对象,然后构思此对象包括的数据,以及操作数据的行为方法。 本专题主要讨论面向对象编程(OOP)的基础和进阶知识,实际开发模型中OOP的主要实践,尽量使用最贴切的例子。 2. 基础专题2.1. 类定义动物是自然界一个庞大的群体,以建模动物类为主要案例论述OOP编程。 Python语言创建动物类的基本语法如下,使用class关键字定义一个动物类: 12class Animal(): pass 类里面可包括数据,如下所示的Animal类包括两个数据:self.name和self.speed: 1234class Animal(): def __init__(self,name,speed): self.name = name # 动物名字 self.speed = speed # 动物行走或飞行速度 注意到类里面通过系统函数__init__为类的2个数据赋值,数据前使用self保留字。 self的作用是指名这两个数据是实例上的,而非类上的。 ...







