Fork me on Github Fork me on Gitee

随笔分类 -  C温故补缺

主参考菜鸟教程C语言
摘要:## 计算机网络 参考:[TCP三次握手详解](https://blog.csdn.net/jun2016425/article/details/81506353). ### OSI模型 简单分层: ![](https://img-blog.csdn.net/2018080715121168?wat 阅读全文
posted @ 2023-06-03 00:01 Tenerome 阅读(204) 评论(0) 推荐(0) 编辑
摘要:### 动态链接(PIC,GOT,PLT,ELF) 参考:[51CTO](https://blog.51cto.com/u_15169172/3033961) 通过静态链接,可以生成一个可执行文件,这个可执行文件既可以是完全链接的也可以是部分链接的,对于部分链接的可执行文件,有些符号引用需要等到可执 阅读全文
posted @ 2023-06-01 19:08 Tenerome 阅读(144) 评论(3) 推荐(0) 编辑
摘要:未定义行为 在计算机程序设计中,未定义行为是指执行某种计算机代码 所产生的结果,这种代码在当前程序状态下的行为在其所使用的语言标准中没有规定. 以C语言为例,未定义行为指C语言标准未作规定的行为,同时,标准也未要求编译器判断未定义行为,所有的未定义行为由编译器自行处理.所以,未定义行为在不同的编译器 阅读全文
posted @ 2022-11-15 16:03 Tenerome 阅读(62) 评论(0) 推荐(0) 编辑
摘要:栈帧 概念 栈帧:也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构,每次函数的调用,都会在调用栈(call stack)上维护一个独立的栈帧(stack frame) 栈帧的内容 函数的返回地址和参数 临时变量:包括函数的非静态局部变量,以及编译器自动生成的其他临时变量 函数调用上下文 阅读全文
posted @ 2022-11-15 11:16 Tenerome 阅读(130) 评论(0) 推荐(0) 编辑
摘要:内存管理 stdlib库中有几个内存管理相关的函数 | 序号 | 函数和描述 | | | | | 1 | void *calloc(int num, int size);在内存中动态地分配 num 个长度为size 个字节 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*si 阅读全文
posted @ 2022-11-15 10:05 Tenerome 阅读(44) 评论(0) 推荐(0) 编辑
摘要:可变参数 stdarg.h 头文件提供了实现可变参数功能的函数和宏。具体步骤如下: 定义一个函数,最后一个参数为省略号,省略号前面可以设置自定义参数,一般传入参数的个数。 int func(int num,...){ } 在函数定义中创建一个 va_list 类型变量,它是一个参数列表,专门用来存参 阅读全文
posted @ 2022-11-14 16:59 Tenerome 阅读(25) 评论(0) 推荐(0) 编辑
摘要:预编译器 预编译器就是之前学的预编译指令的执行者 gcc -E test.c -o test.i 生成预编译文件就是翻译#指令 比如#include<stdio.h>就是把整个stdio.h头文件和项目文件连接 所用预编译指令 | #define | 定义宏 | | | | | #include | 阅读全文
posted @ 2022-11-14 15:10 Tenerome 阅读(93) 评论(0) 推荐(0) 编辑
摘要:文件读写 打开文件 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件 FILE *fopen( const char *filename, const char *mode ); filename 是文件的路径,用来命名文件,访问模式 mode 的值可以是下列值中的一个: | 模式 | 阅读全文
posted @ 2022-11-13 14:09 Tenerome 阅读(88) 评论(0) 推荐(0) 编辑
摘要:输入输出 printf()和scanf() 用来格式化输入输出,它们都是有返回值的 int printf()返回输出的内容的长度 #include<stdio.h> int main(){ int c=printf("abcdefg\n"); printf("%d",c); } 输出:8 转义字符占 阅读全文
posted @ 2022-11-12 22:25 Tenerome 阅读(75) 评论(0) 推荐(0) 编辑
摘要:字节对齐与排序 字节对齐的原因与字节排序 取自:VisualEther 原文档下载:Gitee _packed _packet用于结构体中变量在内存中的对齐.如 typedef struct test_s{ int i; char a[3]; char b[5]; char c; }test_t; 阅读全文
posted @ 2022-11-12 15:47 Tenerome 阅读(96) 评论(0) 推荐(0) 编辑
摘要:结构体与共用体 结构体 是一个可以存储多个不同类型的变量的结构,类似于面对对象中的类(只有成员变量的类). struct tag { member-list member-list member-list ... } variable-list ; tag 是结构体标签。 member-list 是 阅读全文
posted @ 2022-11-12 14:20 Tenerome 阅读(59) 评论(0) 推荐(0) 编辑
摘要:函数指针与回调函数 函数指针就是指向函数调用栈地址的指针,定义时须和函数的返回值类型,参数类型相同 如: #include<stdio.h> int max(int x,int y){ return x>y?x:y; } int main(){ int (*funp)(int,int); funp= 阅读全文
posted @ 2022-11-11 22:33 Tenerome 阅读(59) 评论(0) 推荐(0) 编辑
摘要:C语言反汇编用到的AT&T x86汇编语法 参考:CSDN1,CSDN2 默认gcc -S汇编出的,以及反汇编出的,都是AT&T x86代码,可以用-masm=intel指定为intel x86汇编格式 gcc -S test.c -masm=intel -o test.s 有时编译器会自动优化汇编 阅读全文
posted @ 2022-11-11 20:50 Tenerome 阅读(211) 评论(0) 推荐(0) 编辑
摘要:main()的参数 main()函数的参数,用于在外部执行时传入参数,类似windows的bat脚本或linux的sh脚本.在bat脚本中传入参数,用%接收.sh脚本的参数用$接收. c语言编译成可执行文件后,也是可以传参进去的,接收就是直接用参数名 main()共有三个参数:main(int ar 阅读全文
posted @ 2022-11-11 16:02 Tenerome 阅读(90) 评论(0) 推荐(0) 编辑
摘要:gdb gdb是由GNU软件社区提供的C Debug工具 Pre 在调试前,需要先编译.c程序,且要加上-g使输出文件变得可调式 gcc test.c -g -o test 用gdb test来调试程序,用quit退出调试模式 几个指令 设置参数和显示参数,相当于main()的参数 set args 阅读全文
posted @ 2022-11-11 11:04 Tenerome 阅读(90) 评论(0) 推荐(0) 编辑
摘要:auto,register,extern,static 四个存储类声明符,用于定义变量/函数的作用域和声明周期 ① auto:自动变量,即普通变量,在平时定义变量时会自动赋予其auto类型 被auto修饰的变量的调用是通过函数栈的. 如: 分别在主函数main()中和自定义函数fun1()中定义了一 阅读全文
posted @ 2022-11-10 22:34 Tenerome 阅读(95) 评论(0) 推荐(0) 编辑
摘要:volatile 参考:CSDN volatile也是一个类型修饰符,被其修饰的变量意味着可以被某些编译器未知的因素修改,如操作系统,硬件,线程等. 当遇到volatile修饰的变量时,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问 如: 当while循环中的条件只是一个单 阅读全文
posted @ 2022-11-10 20:18 Tenerome 阅读(30) 评论(0) 推荐(0) 编辑
摘要:数据类型 基本类型:就是算术类型,包括整型和实型 枚举类型:一组离散的整数 void类型:无可用值类型 派生类型:指针(*),数组([]),结构体(struct),共用体(union),函数(fun()) 基本类型占位 32位平台: | 整型 | 实型 | | | | | short:2 | flo 阅读全文
posted @ 2022-11-10 16:17 Tenerome 阅读(60) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示