C/C++
xcmercy
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C语言分步编译
C语言一步编译 命令:gcc -o hello.exe hello.c C语言分步编译 预处理 命令: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 · 662 阅读 · 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 · 2357 阅读 · 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 · 237 阅读 · 0 评论 -
位运算
位运算 计算机中数值运算均转换为补码进行运算,运算的结果也是补码,需计算出原码推出对应的值 取反运算 运算符:~ 正数取反 int a = 2; int b = ~a; /* 计算机中存储数据时,低位在低地址,高位在高地址 运算过程: 1. a:0200 0000 2. b:fdff ffff(补码) 3. 由补码知取反后的数是一个负数,需计算出原码,计算方式:符号位不动,其...原创 2019-04-20 14:47:20 · 258 阅读 · 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 · 185 阅读 · 0 评论 -
Windows下制作及使用库
静态库 vs创建静态库 新建头文件,添加需要的函数的声明 新建步骤一中头文件对应的.c文件,实现头文件中声明的函数 设置项目的配置类型为“静态库(.lib)”,然后生成即可 使用静态库 在链接阶段,会把静态库中完全复制到程序中,一旦链接完成,静态库便不需要了,可直接删除,程序照常执行。 方式一 静态库对应的头文件复制到项目目录下 右键项目,依次选择“添加”->“现有项”,找到生成的.l...原创 2019-04-20 14:00:57 · 319 阅读 · 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 · 649 阅读 · 0 评论 -
makefile
makefile makefile文件名默认是makefile或Makefile,若不是,make命令需要带上-f参数指定makefile文件名 规则 makefile文件的内容是一组规则的集合,规则格式如下: 目标文件:生成目标文件的依赖 通过依赖生成目标文件的命令(必须有一个tab的缩进) 注意:makefile中的tab不能是对应数量的空格组合,否则报错 ALL:hello hel...原创 2019-05-02 20:18:23 · 606 阅读 · 1 评论 -
quick_sort
实现思路 每一趟排序,选取一个枢纽值,将数组元素划分为小于枢纽值和大于枢纽值两部分,等价于子数组,然后递归的对每一部分再次进行相同的排序。当需要排序的子数组元素个数为1时,递归调用返回。 实现细节 /* 三数取中法,选取中值作为枢纽值, 并将中值放在low位置,返回枢纽值 */ int select_pivot(int * list, int low, int high) { int mid...原创 2019-04-21 10:19:31 · 321 阅读 · 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 · 343 阅读 · 0 评论 -
完成端口IOCP
完成端口IOCP 转载自:套接字I/O模型-完成端口IOCP 推荐一篇经典的对完成端口分析的文章:完成端口(CompletionPort)详解 “完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!但不幸的是,该模型只适用于Windows NT和Windows 2000操作系统。因其设计的复杂性,只...转载 2019-01-27 17:22:29 · 1869 阅读 · 0 评论 -
常量
常量 const修饰的变量 修饰全局变量 直接修改 失败 通过指针修改 失败,原因是该变量在常量区,禁止修改 修饰局部变量 直接修改 失败 通过指针修改 成功,原因是该变量在栈区 字符串常量 char *s1 = "hello";与char s2[]= "hello"; char *s1 = "hello"; char类型指针变量s1,指向在常量区中的字符串常量"hello"首...原创 2018-12-09 15:52:31 · 248 阅读 · 0 评论 -
C语言内存区域
内存 变量 变量类型 作用域 生命周期 存储位置 局部变量 函数内部 从变量创建到函数结束 栈区 全局变量 整个项目 从程序创建到程序销毁 数据区 静态局部变量 函数内部 从程序创建到程序销毁 数据区 静态全局变量 所处文件 从程序创建到程序销毁 数据区 函数 函数类型 作用域 生命周期 存储位置 全局函数 整个项目 从程序创建到程序销毁 代码区 ...原创 2018-12-09 15:50:41 · 1025 阅读 · 0 评论 -
计算机中的数值存储
计算机的数值存储 原码 即数值对应的二进制值 最高位为符号位,0表示正,1表示负 其他数值部分是数值本身绝对值的二进制数 负数的原码是在其绝对值的基础上,最高位是1 以1字节为例,正0为0000 0000,负0为1000 0000 反码 正数的反码与原码相同 负数的反码:符号位不变,其它位取反 补码 计算机存储数值用的是补码形式 正数的补码、反码、原码相同 负数的补码为其反码...原创 2018-12-09 15:47:21 · 591 阅读 · 0 评论 -
printf函数
printf函数 打印格式 打印格式 对应数据类型 含义 %d int 有符号十进制整数 %hd short 短整数 %u unsigned int 无符号十进制整数 %hu unsigned short 无符号短整数 %o unsigned int 无符号八进制整数 %x,%X unsigned int 无符号十六进制整数(x对应abcdef,X对应ABCDE...原创 2018-12-09 15:45:41 · 502 阅读 · 0 评论 -
结构体位域并发问题
结构体位域并发问题 0x00 位域并发分析 上图是结构体BitField变量bf所画,需要根据打印推断出各个位域成员的存储情况,具体代码及打印见0x01 代码和0x02 打印结果部分。 如上图所示,GCC编译器会对位域成员进行压缩存储(经测试,VS编译器一样会压缩),比如下方示例代码中的位域成员a、b,他们存储在一个字节上。注意位域成员c、d、e及f的低两位,他们存储在一个字节。 计算机是按字节...原创 2019-06-28 23:01:18 · 1726 阅读 · 0 评论
分享