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 常用于内存空间初始化
/**
*
* 原型:void *memset(void *buffer, int c, int count);
* 头文件:string.h 或memory.h
* 功能:把buffer所指内存区域的前count个字节设置成字符c
* 参数: buffer 要设置值的内存区域首地址指针
* c 字符ASCII码
* count 内存区域字节数
* 返回值: 置成字符c后的内存区域首地址指针
* 说明:返回指向buffer的指针。
*/
void *memset(void *src, int c, size_t count)
{
assert(src != NULL);
char *tmpSrc = (char *)src;
while (count --) {
*tmpSrc =(char)c;
tmpSrc ++;
}
return src;
}
e.g 使用,如初始化一个结构体
struct Grade
{
char name[];
int score;
}; struct Student
{
uint16_t id;
char name[];
char sex;
struct Grade grade;
}; //初始化
void init(){
struct Student student;//开辟内存空间
memset((void*)&student, , sizeof(struct Student));//结构体student所指向内存空间全部=(char)0//开辟内存空间
}
C 常用库函数memset,编译器宏定义assert的更多相关文章
- [PHP] PHP源码常用代码中的宏定义
PHP源码常用代码宏定义:#define 宏名 字符串#表示这是一条预处理命令,所有的预处理命令都以#开头.define是预处理命令.宏名是标识符的一种,命名规则和标识符相同.字符串可以是常数.表达式 ...
- object-c 常用判断null的宏定义,如果是null直接返回@""
#define checkNull(__X__) (__X__) == [NSNull null] || (__X__) == nil ? @"" : [NSString stri ...
- C++通过宏定义判断操作系统及编译器
INTRODUCTION: C++的编译环境千奇百怪,很多时候一些代码在某些编译环境下可用,一旦移到其他环境下,就会干脆Compile Error 对此,我们可以使用C++的宏定义来判断操作系统,从而 ...
- (四)静态断言(上),assert,NDEBUG, 以及通过宏定义处理文件包含关系
一.断言:运行时与预处理时 断言(assertion)是一种编程常用的手段.想必大家都见过 assert 吧.今天我们就来了解一下它. 通常情况下,断言就是将一个返回值总是需要为真的判别式放在语句中, ...
- iOS之常用宏定义
下面我为大家提供一些常用的宏定义! 将这些宏定义 加入到.pch使用 再也不用 用一次写一次这么长的程序了 //-------------------获取设备大小------------------- ...
- iOS 日常工作之常用宏定义大全
转自:http://www.jianshu.com/p/213b3b96cafe 前言: 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间,又有时候忘记怎么定义了 ...
- iOS - 常用的宏定义
1.处理NSLog事件(开发者模式打印,发布者模式不打印) 1 2 3 4 5 #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,& ...
- iOS常用宏 定义
总结了iOS开发过程中的一些常用宏,以后会陆陆续续添加进来. 字符串是否为空 1 #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull c ...
- 20个C语言中常用宏定义总结
01: 防止一个头文件被重复包含 #ifndef COMDEF_H#define COMDEF_H//头文件内容#endif 02: 重新定义一些类型防止由于各种平台和编译器的不同,而产生的类型字节数 ...
随机推荐
- HDU5444 Elven Postman
按要求递归建树输出~ #include<cstdio> #include<algorithm> #include<cstring> using namespace ...
- Vue 项目 在局域网内访问
之前在百度上看到过很多中 关于局域网访问项目的方法, 在这里,个人推荐两种比较喜欢的方法 一.直接在项目的package.json文件中进行配置 ,代码如下 "scripts": ...
- POJ3268 Silver Cow Party (建反图跑两遍Dij)
One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big co ...
- JAVA分级测试——选课系统(补发)
博客园似乎上传图片多了之后会出现各种问题,所以只能直接上代码了 <!DOCTYPE HTML> <html lang="zh"> <head> ...
- AngularJS学习:第一个demo
1. 引入angular.js 相应版本下载地址: https://code.angularjs.org/ 2. 编写html <!DOCTYPE html> <html> & ...
- 构造数列Huffman树总耗费_蓝桥杯
快排! /** 问题描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的 ...
- MySQL报Too many connections
错误信息 Exception in thread "main" java.sql.SQLNonTransientConnectionException: Data source r ...
- 设计模式课程 设计模式精讲 3-10 里氏替换原则coding
1 代码演练 1.1 继承关系判别(是否是真正意义的继承) 1.2 入参控制 1.3 出参控制 1 代码演练 1.1 继承关系判别(是否是真正意义的继承)(其实我觉得这个例子有点牵强) 1.1.1 反 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 显示代码:同一行代码片段: span, div
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- GitHub 网站汉化
居然是一个中文Github网站!该不会是个假的吧? 2018-09-03 17:30 前几天分享了一篇文章——3个搜索技巧!在 GitHub上快速找到实用资源!眼尖心细的读者发现了文中的Github网 ...