C语言开发
文章平均质量分 80
Hani_97
Stay hungry,stay foolish。
展开
-
c语言 switch case 太多优化/重构[二]
c语言 switch case 太多优化/重构[二]1. 背景 - 某该函数switch case 复杂度太高 ,函数太长 pclint不过2. 解决 - 建表,查表处理3. witch case 原理/代码优化 重构参考:1. 背景 - 某该函数switch case 复杂度太高 ,函数太长 pclint不过CHAR * AB_FUN_XXXX(IN ULONG ulResult){ UINT uiRcID; switch (ulResult) { case ERROR_SUCCESS:原创 2021-07-03 17:11:02 · 5451 阅读 · 2 评论 -
extern 关键字说明
extern 关键字说明1. 作用1:extern "C"1.1. 扩展: 一个标准的C头文件格式(extern "C")2. 作用2:extern 变量/函数2.1 背景: 局部变量和外部(全局)变量说明2.1.1 局部变量2.1.2 全局变量2.2 extern 作用2/定义:2.2.1 注意事项1. extern int g_Int; 它是一个声明不是定义2.2.2 注意事项2. 在使用extern时候要严格对应声明时的格式2.2.3 注意事项3. extern变量声明使用规范:在*.c文件中声明了一原创 2021-06-18 10:07:44 · 1431 阅读 · 1 评论 -
C语言:0长度数组/可变数组/柔性数组
C语言:0长度数组/可变数组/柔性数组1. 0长度数组1.1 代码例子1.2 什么是0长度数组(可变数组/柔性数组)?1.3 用途1.4 用法1.5 优点1.6 缺点1.7 重点:数组名仅仅是一个符号1.8 GNU Document中 变长数组的支持2. 代码测试例(0长度的数组,定长数组,指针数组)3. 参考:1. 0长度数组C语言:0长度数组又叫做:可变数组或者柔性数组1.1 代码例子struct ZeroBuffer{ int len; char acData[0]; //这里的0长结构原创 2021-01-26 14:05:44 · 478 阅读 · 0 评论 -
C语言:ip地址合法性检查
C语言:ip地址合法性检查1. 代码实现1.1 说明参考:1. 代码实现#include <stdio.h>#include <string.h>#include <stdlib.h>#include <stdbool.h>bool judgepcIPAddrIsValid(const char *pcIPAddr){ int iDots = 0; /* 字符.的个数 */ int iSetions = 0; /* pcIPAddr 每一部原创 2020-12-10 17:43:28 · 2301 阅读 · 0 评论 -
#define(2) #define和typedef 的区别
typedef 和 #define 的区别1. typedef 和 #define 的区别1.1 功能:1.2 执行时间:1.3 安全检查:1.4 作用域:1.5 书写/分号:2. 例子说明1. typedef 和 #define 的区别1.1 功能:typedef 是用来定义一种数据类型的别名,增强程序的可读性;define 主要用来定义常量,以及书写复杂使用的宏。简单的字符串替换1.2 执行时间:typedef 是编译过程的一部分define 是预编译的部分,在编译之前1.3 安全检查:原创 2020-12-10 09:54:26 · 368 阅读 · 1 评论 -
通俗易懂说字节序,大小端,网络序和主机序(2)htonl和ntohl 源码实现
通俗易懂说字节序,大小端,网络序和主机序(2)htonl和ntohl 源码实现1. htonl 内核源码实现2. ntohl3. 解释了为什么项目中的都用htonl 问题参考1. htonl 内核源码实现系统函数htonl在头文件 netinet/in.h中# if __BYTE_ORDER == __BIG_ENDIAN/* The host byte order is the same as network byte order,so these functions are all just原创 2020-06-01 11:17:56 · 2728 阅读 · 0 评论 -
文件操作接口五(其他常用):access,mkdir,rmdir, remove,getcmd,stat
文件操作接口三:文件目录操作接口:access,mkdir,rmdir, remove,getwd,stat原创 2019-12-14 18:05:10 · 819 阅读 · 1 评论 -
文件操作接口四(系统调用):open,read,write,close
Linux系统调用函数:open,read,write,close1. open2. read3. write4. clode参考1. open2. read3. write4. clode参考原创 2019-12-12 20:11:31 · 1403 阅读 · 0 评论 -
文件操作接口三(库函数):fopen,fwrite,fread,fclose
C库函数文件操作接口: fopen,fwrite,fread,fclose1. fopen2. fwrite3. fread4. fclose5. 其他相关接口参考:C语言库函数对文件操作接口:fopen,fclose,fread,fwrite,他们属于C库函数,在lib层中。返回值为FILE*。1. fopen2. fwrite3. fread4. fclose5. 其他相关接口参...原创 2019-12-12 08:59:24 · 895 阅读 · 0 评论 -
文件操作接口二(缓冲区和缓存)
文件操作接口一(缓冲区和缓存):一、缓冲区1、什么是缓冲区?2. 为什么需要缓冲区?3. 缓冲区的作用4.缓冲区的类型5.缓冲区的刷新5.1 输出缓冲区的条件:二、缓存2.1 缓存是什么?2.2 为什么需要缓存?2.3 缓存原理2.4 缓存作用2.5 磁盘的cache2.6 浏览器缓存三、缓存(cache)与缓冲(buffer)的主要区别参考一、缓冲区1、什么是缓冲区?缓冲区(Buffe...原创 2020-02-25 15:03:44 · 579 阅读 · 1 评论 -
文件操作接口一:(系统调用与库函数)
文件操作接口四:(系统调用与库函数)1. 系统调用与库函数区别1. 系统调用定义:2.库函数定义:3.运行位置4.执行效率5.关联6.用户态切换内核态7.缓冲区参考1. 系统调用与库函数区别1. 系统调用定义:进程直接调用内核暴露出来的的接口的方式称为系统调用2.库函数定义:调用将内核暴露出来的接口封装好的函数的方法为库函数的调用注:有的库函数不需要封装内核暴露出来的接口3.运行位...原创 2019-12-22 22:22:59 · 338 阅读 · 0 评论 -
有符号数和无符号数详解(2)补码详解
有符号数和无符号数详解(2)补码详解1. 为什么需要补码1.1 背景2 补码的思想2.1 我们希望只设计加法运算器,不用减法运算器。2.2 现在问题是:怎么表示-1呢?3. 补码3.1 补码的优点3.2 例子:4. 补码的本质:参考1. 为什么需要补码1.1 背景(只设计加法运算器)在计算机内,整数的长度是确定的,在字长为32位的计算机中,整数的长度就是32个二进制,这其中还包括了符号位(1表示正,0表示负)。这里面我们为了方便描述,就假设机器字长为8位。例如,十进制整数 19,二进制真值表示为原创 2020-05-14 23:01:41 · 4862 阅读 · 0 评论 -
通俗易懂说(C语言常用函数之)(2)memmem
通俗易懂说(C语言常用函数之)(2)memmem1. memmem2. memmem实现1. memmem原型void *memmem(const void *haystack, size_t haystacklen,const void *needle, size_t needlelen);功能在一块内存中寻找匹配另一块内存的内容的第一个位置返回值返回值:返回该位置的指针,如找不到,返回空指针。2. memmem实现static const char* my_memmem(cons原创 2020-05-14 20:49:27 · 6152 阅读 · 0 评论 -
SWIG介绍
SWIG介绍1. SWIG2. 作用3. 例子参考1. SWIGSimplified Wrapper and Interface Generator (SWIG)简化包装器和接口生成器2. 作用向脚本语言接口公开 C/C++ 代码因为:c/c++的高效性能,所有对开发人员的一个常见要求是向脚本语言接口公开 C/C++ 代码,这正是 Simplified Wrapper and Interface Generator (SWIG) 的用武之地。3. 例子SWIG 允许您向广泛的脚本语言公开 C原创 2020-05-11 20:25:39 · 2813 阅读 · 0 评论 -
size_t 和 ssize_t
size_t1. size_t 是什么啥?1.1 例子:2. size_t 大小3. size_t 是无符号的4. size_t和int区别4.1 为什么有时候不用int,而是用size_type或者size_t:5. size_t 优点参考1. size_t 是什么啥?它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。size_t 类型定义在cstddef头文件中size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”1.1 例子:通常我原创 2020-05-11 20:17:16 · 2073 阅读 · 0 评论 -
有符号数和无符号数详解
有符号 无符号 -1 和 0xFFFFFFFF 问题1. 通过例子看问题2. 有符号数和无符号数2.1 什么是无符号数 ?2.2 什么是有符号数 ?3. 原码、反码、补码3.1 背景3.2 原码、反码、补码3.2.1 什么是机器数?3.2.2 什么是真值?3.2.3 原码、反码、补码4. -1 和 0xFFFFFFFF问题参考1. 通过例子看问题unsigned int uint;int i = -1;uint = i;printf("%x %d\n", uint, i);//输出ffffff原创 2020-05-10 13:47:41 · 41995 阅读 · 2 评论 -
字符串:取出文件路径中的文件名和绝对路径
取出文件路径中的文件名和绝对路径1. 代码1. 代码#include <stdio.h>#include<string.h>#define FILE_PATH_LENGTH 128#define IN //表示参数是入参#define OUT void getacFilePath(IN char* pSrc, OUT char* pDst){ char...原创 2020-04-09 16:33:39 · 2324 阅读 · 0 评论 -
常见编译错误
常见编译错误1. 出现 expected ‘)' before '*' token2. expected specifier-qualifier-list3. undefined reference to1. 出现 expected ‘)’ before ‘*’ token原因是1. 前面的定义在后面 2. 头文件也添加了,可能是定义在某个特定 宏 之中 需要拿出来处理2. e...原创 2020-04-09 09:37:14 · 4038 阅读 · 2 评论 -
字符数组初始化为空
字符数组初始化为空1. 总结起来有以下三种方式:2. 分析3. 结论1. 总结起来有以下三种方式:(1) char str[10]="";(2) char str[10]={’\0’};(3) char str[10] = ‘\0’;2. 分析第(1)(2)种方式是将str数组的所有元素都初始化为’\0’,而第(3)种方式是只将str数组的第一个元素初始化为’\0’。如果数组的si...原创 2020-04-08 16:38:20 · 30409 阅读 · 0 评论 -
回调函数
回调函数1. 定义2. 理解3. 举例子参考1. 定义我们先来看看回调的英文定义:A callback is a function that is passed as an argument to another function and is executed after its parent function has completed。字面上的理解,回调函数就是一个参数,将这个函数...原创 2020-04-08 11:36:34 · 142 阅读 · 0 评论 -
#ifndef 和 #pragma
防止头文件重复包含:ifndef 和 pragma1. #ifndef2. #pragma once为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式1. #ifndef#ifndef 的方式依赖于宏名字不能冲突 ,这不仅可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。如:...原创 2020-04-08 10:59:55 · 311 阅读 · 1 评论 -
文件操作接口六:fseek ftell
文件操作接口六:fseek ftell1.fseek()1.1 功能1.2 语法1.3 参数1.4 返回值1.5 例子2.ftell()2.1 功能2.2 返回值3. 代码1.fseek()1.1 功能移动文件流的读写位置1.2 语法int fseek(FILE *stream, long offset, int fromwhere)1.3 参数stream:文件流offset:正...原创 2020-04-07 17:58:36 · 332 阅读 · 0 评论 -
volatile 关键字
volatile1 背景:1.1 通俗易懂的说volatile:2 volatile含义:3 volatile作用4 使用场景volatile 变量:1 背景:编译器为了优化而提供缓存效率和调整指令执行顺序1.1 通俗易懂的说volatile:这个变量可能会被意想不到的改变,这样编译器就不会去假设这个变量的值。因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取......原创 2020-04-07 14:12:27 · 298 阅读 · 1 评论 -
PCLINT(2):MVG NEST LOC (圈复杂度 嵌套深度 代码行数)
PCLINT:MVG圈复杂度 NEST嵌套深度 LOC代码行数1. PCLINT MVG圈复杂度 NEST嵌套深度 LOC代码行数2. 圈复杂度的表现:1. PCLINT MVG圈复杂度 NEST嵌套深度 LOC代码行数excessive lines ,NEST=3 MVG=27 LOC=79excessive MVG ,NEST=3 MVG=27 LOC=79excessive ne...原创 2020-03-27 16:24:05 · 1640 阅读 · 0 评论 -
PCLINT(1) LINT 代码规范
LINT Guide pclint1. LINT 注意事项2. LINT 代码规范1. LINT 注意事项注意1:LINT的价值在于能够引导和辅助我们挖掘代码中的隐患对代码进行优化和改进分析,以提高我们的水平。反之,机械地物理上消除LINT告警是一种舍本逐末的行为。注意2:消除LINT告警本身不是最终目的,LINT检查的关键价值在于引导我们分析和消除产生告警的问题根源。注意3:通过关闭选...原创 2020-03-27 16:18:33 · 870 阅读 · 0 评论 -
正则表达式,notepad++正则及常用操作
正则表达式原创 2020-03-26 14:56:36 · 1991 阅读 · 0 评论 -
指针数组和数组指针
指针数组和数组指针1. 指针数组和数组指针2. 优先级: ()>[]>*3. 一个非常好的例子:参考1. 指针数组和数组指针指针数组:是一个数组,装着指针的数组 int *p[2]数组指针:是指针,指向数组的指针 int (*p)[2]2. 优先级: ()>[]>*(*p)[n]: 先看括号内,p是一个指针,这个指针指向一个一维数组数组长度为n,这是数...原创 2020-03-25 17:54:46 · 166 阅读 · 0 评论 -
#define(1)define常用操作
关于宏#define IN、OUT和INOUT的说明1. 例子参考1. 例子在工程中会有类似于上面这种宏定义出现#ifndef IN #define IN#endif#ifndef OUT#define OUT#endif#ifndef INOUT#define INOUT#endif这些宏标记宏 表示输入参数,仅仅是一个标识作用,没有其他意思。参考https:/...原创 2020-03-23 10:48:41 · 1588 阅读 · 0 评论 -
C语言的一些奇技淫巧(1)嵌套语句
C语言的一些奇技淫巧(1)嵌套语句原创 2019-12-14 17:53:26 · 694 阅读 · 0 评论 -
Linux c 获取文件大小两种方式
Linux c 获取文件大小两种方式Linux c 获取文件大小(1)Linux c 获取文件大小(2)测试Linux c 获取文件大小(1) /* 需要头文件 #include <stdarg.h> */ int getFileSize1(const char *fileName) { FILE *fp = NULL; int fileSize = 0; ...原创 2019-12-10 11:53:08 · 3669 阅读 · 1 评论 -
字符串切割函数strtok、strtok_s、strtok_r
字符串切割函数strtok、strtok_s、strtok_r1. strtok2. strtok_s3. strtok_r参考:1. strtok待续……2. strtok_s3. strtok_r参考:[1]: https://blog.csdn.net/hustfoxy/article/details/23473805/[2]: https://blog.csdn.net/yi...原创 2019-10-28 09:18:06 · 641 阅读 · 0 评论 -
C语言-字符串拷贝(3)strlcpy
C语言-字符串拷贝(3)strlcpy1. strlcpy1 定义:2 原型:3 功能:4 说明:5 优点:6 Linux 实现参考1. strlcpy1 定义:strncpy 把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。2 原型:size_t strlcpy(char *dest, const char *src, size_t size)参数:des...原创 2019-10-22 20:33:34 · 3700 阅读 · 0 评论 -
C语言-字符串拷贝(2)strncpy
C语言-字符串拷贝(2)strncpy1. strncpy1 定义:2 原型:3 功能:4 说明:5 缺点:6 实现-原始版16 实现-原始版2参考:1. strncpy1 定义:strncpy 把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。2 原型:extern char *strncpy(char *dest, char *src, in...原创 2019-10-22 09:24:35 · 4824 阅读 · 3 评论 -
C语言-字符串拷贝(1)strcpy
C语言-字符串拷贝(1)strcpy1. strcpy1 定义:2 原型:3 功能:4 说明:5 缺点:6 实现2. 参考:1. strcpy1 定义:strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char* ,strcpy 是依据 /0 作为结束判断的。2 原型:char strcpy(char dest, const char *src);3 功能:...原创 2019-10-22 09:20:11 · 2870 阅读 · 0 评论 -
通俗易懂说 realloc
通俗易懂说realloc功能语法注意实现功能动态调整申请内存大小重新调整之前通过malloc或calloc所分配的内存块大小语法原型: extern void *realloc(void mem_address, unsigned int newSize);语法: 指针名=(数据类型)realloc(要改变内存大小的指针名,新的大小)返回值:如果分配成功则返回被分配内存的指针;否则返...原创 2019-03-29 09:29:38 · 934 阅读 · 0 评论 -
通俗易懂说内联函数 inline
通俗易懂说内联函数 inline出现原因优点原理限制请求缺点举例出现原因内联函数inline为了解决C语言中的宏#define存在的问题而诞生。因为,宏虽然看起来像函数,但是它使用预处理器实现的。宏的优点是:省去了函数调用的开销;宏的缺点是:没有类型安全性检查;优点获得宏带来的效率,即免除了函数调用成本;又解决了宏的缺点,inline函数具有类型安全检查;原理编译器直接将内...原创 2019-04-03 09:13:34 · 444 阅读 · 0 评论 -
通俗易懂说static
通俗易懂说static作用1:隐藏作用2:保持变量内容持久作用3:初始化为0举例:static关键字有三个作用:作用1:隐藏因为所有未加static修饰的函数、变量都具有全局可见性,即其他文件可见,可用;加了static修饰后,修饰的函数、变量就会对其他源文件隐藏,就只能在本文件内被访问了。利用这一作用可以在不同文件中定义同名函数或变量,而不必担心命名冲突。作用2:保持变量内容持久对...原创 2019-04-03 10:03:54 · 507 阅读 · 1 评论 -
通俗易懂说(C语言常用函数之)(1)strchr,strrchr,memchr,strstr,strspn, memcmp
通俗易懂说(C语言常用函数之)strchr,strrchr1. strchr1.1 函数原型1.2 功能1.3 实现1.4 例子2. strrchr1. strchr1.1 函数原型原型: char *strchr(const char *str, char ch)参数: 字符串str,查找的字符ch返回值: 返回字符ch在字符串str中第一次出现的位置1.2 功能查找字符串st...原创 2019-04-18 23:08:40 · 616 阅读 · 0 评论 -
通俗易懂说软件编程规范(1)变量使用规范
通俗易懂说软件编程规范(1)变量使用规范1. 变量1.1 变量前缀1.2 变量命名1.3 类型转换1.4 移位1.5 初始化1.6 常量1.7 负数1. 变量1.1 变量前缀double long dlNamelong lNameunsigned long ulNameshort sNamechar cNameunsigned char ucName ...原创 2019-05-06 19:41:59 · 652 阅读 · 0 评论 -
通俗易懂说软件编程规范(2)struct、union、enum 使用命名规范
通俗易懂说软件编程规范(2)struct、union、enum使用规范1. struct、union、enum范例1. struct、union、enum使用说明1. struct、union、enum范例//结构体 struct 范例typedef struct tagADD_TWO_NUM{……}ADD_TWO_NUM_S;//联合体 union范例typedef union ...原创 2019-05-07 17:46:35 · 690 阅读 · 0 评论