C/C++
xcmercy
这个作者很懒,什么都没留下…
展开
-
C语言分步编译
C语言一步编译命令:gcc -o hello.exe hello.cC语言分步编译预处理命令:gcc -E hello.c -o hello.i宏定义展开头文件展开条件编译剔除注释编译命令:gcc -S hello.i -o hello.s检查语法将C语言转换为汇编语言汇编命令:gcc -c hello.s -o hello.o将汇编...原创 2018-12-09 15:41:25 · 595 阅读 · 0 评论 -
VS项目依赖编译
VS中配置多个项目之间的依赖编译应用场景解决方案下有三个项目A,B,C,A项目为公共模块,生成静态库,供B、C两项目使用,即B、C项目都依赖于A项目。一旦改动A,需要先生成A,再生成B、C,才能保证B、C使用A最新的代码逻辑。现在,我们希望在改动了A之后,不需要手动生成A,在生成B或者C的时候,自动的先生成A,在生成B。解决方案右键B项目选择:“生成依赖项”->“项目依赖项”,在该项...原创 2019-04-20 15:26:44 · 2097 阅读 · 0 评论 -
数组指针与指针数组
数组指针与指针数组数组指针int arr[5] = {1,2,3,4,5};int (*p)[5] = &arr;for (int i = 0; i < 5; i++){ printf("%d\n", (*p)[i]); // *p 相当于 arr}int (*p)[5];[]优先级比*高,所以加小括号,表明p是一个指针。整体表明p是指向一个长度是5的int数...原创 2019-04-20 14:47:48 · 179 阅读 · 0 评论 -
位运算
位运算计算机中数值运算均转换为补码进行运算,运算的结果也是补码,需计算出原码推出对应的值取反运算运算符:~正数取反int a = 2;int b = ~a;/* 计算机中存储数据时,低位在低地址,高位在高地址 运算过程: 1. a:0200 0000 2. b:fdff ffff(补码) 3. 由补码知取反后的数是一个负数,需计算出原码,计算方式:符号位不动,其...原创 2019-04-20 14:47:20 · 193 阅读 · 0 评论 -
GDB使用
GDB使用常用指令list/l列出源码,可指定行号break/b 行号在指定行打断点next/n逐过程step/s逐语句run/r运行程序quit/q退出gdb调试continue执行到下一断点print/p 变量名打印变量值其他指令及用法finish跳出函数内部,返回调用处start从程序入口函数处开始执行,...原创 2019-04-20 14:44:56 · 131 阅读 · 0 评论 -
Windows下制作及使用库
静态库vs创建静态库新建头文件,添加需要的函数的声明新建步骤一中头文件对应的.c文件,实现头文件中声明的函数设置项目的配置类型为“静态库(.lib)”,然后生成即可使用静态库在链接阶段,会把静态库中完全复制到程序中,一旦链接完成,静态库便不需要了,可直接删除,程序照常执行。方式一静态库对应的头文件复制到项目目录下右键项目,依次选择“添加”->“现有项”,找到生成的.l...原创 2019-04-20 14:00:57 · 248 阅读 · 0 评论 -
GCC常用参数及制作使用库
GCC常用参数及制作使用库常用参数-o指定输出文件名gcc hello.c -o hello-I指定头文件所在目录gcc hello.c -o hello -I ./includes-g添加调试信息,配合gdb使用gcc main.c -o debug_main -g -I ./includes/-Wall显示所有调试信息gcc main.c -o mai...原创 2019-05-02 20:22:18 · 553 阅读 · 0 评论 -
makefile
makefilemakefile文件名默认是makefile或Makefile,若不是,make命令需要带上-f参数指定makefile文件名规则makefile文件的内容是一组规则的集合,规则格式如下:目标文件:生成目标文件的依赖 通过依赖生成目标文件的命令(必须有一个tab的缩进)注意:makefile中的tab不能是对应数量的空格组合,否则报错ALL:hellohel...原创 2019-05-02 20:18:23 · 500 阅读 · 1 评论 -
quick_sort
实现思路每一趟排序,选取一个枢纽值,将数组元素划分为小于枢纽值和大于枢纽值两部分,等价于子数组,然后递归的对每一部分再次进行相同的排序。当需要排序的子数组元素个数为1时,递归调用返回。实现细节/* 三数取中法,选取中值作为枢纽值, 并将中值放在low位置,返回枢纽值*/int select_pivot(int * list, int low, int high){ int mid...原创 2019-04-21 10:19:31 · 256 阅读 · 0 评论 -
insert_sort
实现思路将1个记录插入到已经排好序的有序表中,得到新的、记录数加1的有序表实现细节void insert_sort(int * list, int length){ // 假设0号位置已经排好序,故从1开始 for (int i = 1; i < length; i++) { if (list[i] < list[i - 1]) { // 保存需要找位置进行...原创 2019-04-21 10:18:59 · 278 阅读 · 0 评论 -
完成端口IOCP
完成端口IOCP转载自:套接字I/O模型-完成端口IOCP推荐一篇经典的对完成端口分析的文章:完成端口(CompletionPort)详解“完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!但不幸的是,该模型只适用于Windows NT和Windows 2000操作系统。因其设计的复杂性,只...转载 2019-01-27 17:22:29 · 1770 阅读 · 0 评论 -
常量
常量const修饰的变量修饰全局变量直接修改 失败通过指针修改 失败,原因是该变量在常量区,禁止修改修饰局部变量直接修改 失败通过指针修改 成功,原因是该变量在栈区字符串常量char *s1 = "hello";与char s2[]= "hello";char *s1 = "hello";char类型指针变量s1,指向在常量区中的字符串常量"hello"首...原创 2018-12-09 15:52:31 · 196 阅读 · 0 评论 -
C语言内存区域
内存变量变量类型作用域生命周期存储位置局部变量函数内部从变量创建到函数结束栈区全局变量整个项目从程序创建到程序销毁数据区静态局部变量函数内部从程序创建到程序销毁数据区静态全局变量所处文件从程序创建到程序销毁数据区函数函数类型作用域生命周期存储位置全局函数整个项目从程序创建到程序销毁代码区...原创 2018-12-09 15:50:41 · 936 阅读 · 0 评论 -
计算机中的数值存储
计算机的数值存储原码即数值对应的二进制值最高位为符号位,0表示正,1表示负其他数值部分是数值本身绝对值的二进制数负数的原码是在其绝对值的基础上,最高位是1以1字节为例,正0为0000 0000,负0为1000 0000反码正数的反码与原码相同负数的反码:符号位不变,其它位取反补码计算机存储数值用的是补码形式正数的补码、反码、原码相同负数的补码为其反码...原创 2018-12-09 15:47:21 · 496 阅读 · 0 评论 -
printf函数
printf函数打印格式打印格式对应数据类型含义%dint有符号十进制整数%hdshort短整数%uunsigned int无符号十进制整数%huunsigned short无符号短整数%ounsigned int无符号八进制整数%x,%Xunsigned int无符号十六进制整数(x对应abcdef,X对应ABCDE...原创 2018-12-09 15:45:41 · 438 阅读 · 0 评论 -
结构体位域并发问题
结构体位域并发问题0x00 位域并发分析上图是结构体BitField变量bf所画,需要根据打印推断出各个位域成员的存储情况,具体代码及打印见0x01 代码和0x02 打印结果部分。如上图所示,GCC编译器会对位域成员进行压缩存储(经测试,VS编译器一样会压缩),比如下方示例代码中的位域成员a、b,他们存储在一个字节上。注意位域成员c、d、e及f的低两位,他们存储在一个字节。计算机是按字节...原创 2019-06-28 23:01:18 · 1492 阅读 · 0 评论