C 常用库函数memset,编译器宏定义assert
一、 总览
1.1库函数
函数名 | 头文件 | 功能 | 原型 | 说明 |
syslog | syslog.h | 记录至系统记录(日志) | void syslog(int, const char *, ...) __printflike(2, 3) | 参数1:优先级,参数2:要输出到系统日志的 参数3:(格式化)字符串 |
perror | stdio.h | 将上个函数错误原因输出至stderr | void perror(const char *) | 参数:要优先打印到stderr的字符串 |
memset |
string.h /memory.h |
将指定内存区域全部设置为默认ASCII码值 | void *memset(void *, int, size_t) |
参数1:指定内存块指针 参数2:字符ASCII码 参数3:要初始化的内存前n个字节数 |
bzero | strings.h |
置字符串前n个字节=0,且包括'\0' , 已被舍弃,由memset取代; 类似的有bcopy,bcmp等 |
void bzero(void *, size_t) |
参数1: 指定内存块指针 参数2: 要初始化为0的内存前n个字节 |
abort | stdlib.h | 引发程序不正常终止 |
void abort(void) __dead2 #define __dead2 __attribute__((noreturn)) |
无参数 __attribute__((noreturn)) 表示希望自定义有返回值函数不想返回值 |
宏定义 | 头文件 | 功能 | 原型 | 说明 |
assert | assert.h |
断言,用于调试时判断表达式是否通过验证 (真:通过;假:未通过) |
#define assert(e) \ ((void) ((e) ? ((void)0) : __assert (#e, __FILE__, __LINE__))) #define __assert(e, file, line) \ ((void)printf ("%s:%u: failed assertion `%s'\n", file, line, e), abort()) |
e:表达式的值 __FILE__:文件名 __LINE__:当前代码行号 |
1.2宏定义
1)几个ANSI C标准定义的编译器内置宏
__LINE__:在源代码中插入当前源代码行号;
__FILE__:在源文件中插入当前源文件名;
__DATE__:在源文件中插入当前的编译日期
__TIME__:在源文件中插入当前编译时间;
__STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;
__cplusplus:当编写C++程序时该标识符被定义。
2.函数实现源码
2.1 memset 常用于内存空间初始化
1 /** 2 * 3 * 原型:void *memset(void *buffer, int c, int count); 4 * 头文件:string.h 或memory.h 5 * 功能:把buffer所指内存区域的前count个字节设置成字符c 6 * 参数: buffer 要设置值的内存区域首地址指针 7 * c 字符ASCII码 8 * count 内存区域字节数 9 * 返回值: 置成字符c后的内存区域首地址指针 10 * 说明:返回指向buffer的指针。 11 */ 12 void *memset(void *src, int c, size_t count) 13 { 14 assert(src != NULL); 15 char *tmpSrc = (char *)src; 16 while (count --) { 17 *tmpSrc =(char)c; 18 tmpSrc ++; 19 } 20 return src; 21 }
e.g 使用,如初始化一个结构体
struct Grade { char name[30]; int score; }; struct Student { uint16_t id; char name[20]; char sex; struct Grade grade; }; //初始化 void init(){ struct Student student;//开辟内存空间 memset((void*)&student, 0, sizeof(struct Student));//结构体student所指向内存空间全部=(char)0//开辟内存空间 }
本文作者:明明1109
本文链接:https://www.cnblogs.com/fortunely/p/4883937.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具