- 博客(19)
- 收藏
- 关注
转载 C语言头文件/工程组织原则
一、 头文件组织原则源文件中实现变量、函数的定义,并指定链接范围。头文件中书写外部需要使用的全局变量、函数声明及数据类型和宏的定义。 建议组织头文件内容时遵循以下原则: 1)头文件划分原则:类型定义、宏定义尽量与函数声明相分离,分别位于不同的头文件中。内部函数声明头文件与外部函数声明头文件相分离,内部类型定义头文件与外部类型定义头文件相分离。 注意,类型和宏定义有时无法分拆为不同文件,比如结构体内数组成员的元素个数用常量宏表示时。因此仅分离类型宏定义与函数声明,且分别置于*.th和*.fh文件(
2021-06-10 17:09:30
465
转载 struct 对齐原则
原则一:结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为0计算)。原则二:在经过第一原则分析后,检查计算出的存储单元是否为所有元素中最宽的元素的长度的整数倍,是,则结束;若不是,则补齐为它的整数倍。...
2021-06-01 17:55:59
128
原创 switch case使用注意事项
#include <stdio.h>#include <stdlib.h>typedef struct{int a;short b;char * c;}test_switch1_t;typedef struct{int test1;int a;short b;char * c;}test_switch2_t;int main(){int flag = 0;switch (flag){case 0:;test_switch1_t *test1
2021-05-31 11:26:00
149
原创 无名结构体和联合体(struct&union)
记得之前在哪里看到了如下形式的结构体和联合体的命名方式;union{char alpha;int num;};struct{char alpha;int num;};因为写代码的时候用到了,在外网上找了点资料,把这个点记下来;Anonymous unions/structures are also known as unnamed unions/structures as they don’t have names. Since there is no names, direct o
2021-05-31 10:40:02
1232
3
原创 结构体的位域排列
typedef struct{char x:2,y:3,z:3;}test2_t;=======================test2_t c1;c1.x =1;c1.y =2;c1.z =3;int* c2 = (int *)&c1;printf(“c1.x = %d\n”, c1);输出结果:c1.x = 105转换为二进制为:011 010 01 排列次序分别是 z y x涉及到MSB 和LSB的知识点,顺便收集:(MSB)100 0011(LSB)将
2021-05-28 17:06:58
214
原创 关于C语言指针进行四则运算后变化的一点研究
#include <stdio.h>typedef struct{int end;struct{short a;int b;};int d;}test1_t;int main(){printf(“sizeof(test1_t) = %ld\n”, sizeof(test1_t));test1_t a1;char* b1 = &a1;printf(“b1 = %d\n”, b1);b1+=1;printf(“b1 = %d\n”, b1);b1 = (
2021-05-28 16:22:37
140
原创 关于结构体套共用体/结构体的一点笔记
#include <stdio.h>typedef struct{ int end; union { short a; int b; }; int d;}test_t;typedef struct{ int end; struct { short a; int b; }; int d;}test1_t;int main()...
2021-05-26 16:33:19
457
原创 关于 const+char+* 的一点研究
分三种形式:char const *p; const char* p;char *const p;先贴一个例子:成功执行,执行结果:ptr1 =123321ptr1[0] = 1,ptr2[0] =1, ptr3[0] = 1====================================尝试通过指针ptr2,ptr3 修改ptr1指向的字符串的值。编译失败:如果通过普通指针进行修改:执行成功:...
2021-05-19 10:39:37
120
原创 sprintf的用法
#include <stdio.h>#include <string.h>int main(){ int a = 2; char str[100]; sprintf(&str[0], "%d", a); sprintf(&str[1],"%c",str[0]); printf("str =%s, a = %d,strlen = %ld,str[0] =%c,str[1] =%c\n",\ st...
2021-05-14 10:39:10
141
原创 KMP 字符串处理算法
关于KMP,虽然已经理解了,并且能记住实现思路,但是在每次遇到需要写出代码的时候总会出现问题,整理一下代码,加深一下映像。上代码:#include <stdio.h>#include <stdlib.h>#include <string.h>void get_next(char* str1,int next[]) // From the array next[];{ int i = 1, j = 0; ...
2021-04-23 10:06:39
44
原创 字节序及转换
字节序一共有两种方式:大端,小端;大端:将高序字节存在起始地址;小端:将低序字节存放在起始地址;网络字节序统一大端存储方式;本地字节序是根据本地的cpu来的,x86的cpu都是小端存储的。转换方式:htons 把unsigned short类型从主机序转换到网络序htonl 把unsigned long类型从主机序转换到网络序ntohs 把unsigned short类型从网络序转换到主机序ntohl 把unsigned long类型从网络序转换到主机序win 下包含在库 winsock
2020-12-14 10:41:01
545
原创 socket 通信
几个需要注意的点:read函数阻塞下并不是如想象一般 读取等到满足相应的长度再退出,而是一收到数据就会返回;想要达到 接收定长数据的效果,需要在阻塞模式下 将flags 置为:MSG_WAITALL;实现 非阻塞的模式,有两种 方式:一种是在connect和accept过后进行 1.获取套接字的相关字段,并进行修改,大致如下:int x; x=fcntl(s,F_GETFL,0); fcntl(s,F_SETFL,x | O_NONBLOCK);另外一种方法是:将send/re.
2020-12-08 00:00:16
77
原创 线程
主线程和子线程之间没有必然的退出次序关系,主线程退出,子线程可以继续执行,子线程退出,主线程也可以继续执行;程序加载到内存中执行的时候,进程会生成一个主线程,虽然主线程和子线程之间没有必然的退出次序关系,但是如果进程终止,那么进程下所有的线程都会终止。主线程退出后子线程的状态依赖于它所在的进程,如果进程没有退出的话子线程依然正常运转。如果进程退出了,那么它所有的线程都会退出,所以子线程也就退出了。pthread_detach():设置分离状态pthread_self()获得线程自身ID;...
2020-10-14 20:05:12
109
原创 LTE rlc 子层代码阅读及总结
add_bearer: //choose mode-->insert entity-->configure and add to arrayconfigure: //check timers-->configure timers-->configure timers/status_prohibit_timerwrite_sdu: //check size-->check if block on write to queue-->write--&...
2020-10-14 18:47:24
505
原创 关于pthread.h的属性及一点展开
pthread.h 参数attr一些变量的定义:#include <sys/types.h> pthread_mutex_t:Used for mutexes. pthread_t:Used to identify a thread,线程的句柄是pthread_t类型, 该类型不能作为整数处理, 而是一个结构.线程基础:头文件: <pthread.h> 线程操作包括线程创建,终止,同步(联接,阻塞),调度,数据管理和流程交互。 线程不维护已创...
2020-10-14 18:37:17
450
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人