C语言最佳实践(B站学习)更新

简介: C语言最佳实践(B站学习)更新

接口设计模式:

为独立的网络请求模块设计的接口:

select接口(不如epoll好)

epoll 解决了select问题,将一个多个监听描述符的行为再抽象为一个文件描述符的监听,包括指针一起封装起来。

浏览器的:从网络获取数据功能运行独立的网络进程中。


一般性方法和技巧

1.尽量避免返回void

2.明确定义返回值的含义

3.正确使用const修饰词

4.使用最合适的参数类型


size_t <————> int

c中任何对象能达到的最大长度。没有负数。

size_t 补充

size_t 是一些C/C++标准在stddef.h中定义的,size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数。


它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t 可能不一样。size_t在32位系统上定义为 unsigned int,也就是32位无符号整型。在64位系统上定义为 unsigned long ,也就是64位无符号整形。size_t 的目的是提供一种可移植的方法来声明与系统中可寻址的内存区域一致的长度。


size_t 在数组下标和内存管理函数之类的地方广泛使用。例如,size_t 用做sizeof 操作符的返回值类型,同时也是很多函数的参数类型,包括malloc 和strlen。


在声明诸如字符数或者数组索引这样的长度变量时用size_t 是好的做法。它经常用于循环计数器、数组索引,有时候还用在指针算术运算上。size_t 的声明是实现相关的。

#ifndef __SIZE_T
#define __SIZE_T
typedef unsigned int size_t;
#endif

打印size_t 类型的值时要小心。这是无符号值,如果选错格式说明符,可能会得到不可靠的结果。推荐的格式说明符是%zu。不过,某些情况下不能用这个说明符, 作为替代,可以考虑%u 或%lu。


模式一:

标准IO 抽象数据类型

比如 file

下面的模式与模式一相反

模式二:

抽象算法

1.围绕抽象算法设计接口

2.算法不依赖于具体的数据类型

3.算法不依赖于具体的数据存储方式

比如一种排序算法,不需要针对于一种类型,编写一种排序算法。

void qsort(void *base, size_t nel, size_t width, int (*compar)(const void *,const void *)); 
相关文章
|
1月前
|
存储 C语言
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
24 1
|
1月前
|
编译器 C语言 C++
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
17 0
|
12天前
|
存储 编译器 C语言
c语言学习历程【1】
c语言学习历程【1】
11 1
|
13天前
|
存储 程序员 Go
|
1月前
|
C语言
C语言学习记录——枚举(定义、与结构体的区别、优点)
C语言学习记录——枚举(定义、与结构体的区别、优点)
22 3
|
1月前
|
C语言 C++
C语言学习记录——内存函数(memcpy、memmove、memcmp、memset、模拟实现memcpy、模拟实现memmove)
C语言学习记录——内存函数(memcpy、memmove、memcmp、memset、模拟实现memcpy、模拟实现memmove)
23 3
|
1月前
|
C语言
C语言学习记录——通讯录(静态内存)
C语言学习记录——通讯录(静态内存)
17 2
|
1月前
|
存储 C语言
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
20 2
|
1月前
|
存储 编译器 C语言
C语言学习记录——结构体(声明、初始化、自引用、内存对齐、结构体设计、修改默认对齐数、结构体传参)一
C语言学习记录——结构体(声明、初始化、自引用、内存对齐、结构体设计、修改默认对齐数、结构体传参)一
26 2
|
1月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
19 1