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: 重新定义一些类型防止由于各种平台和编译器的不同,而产生的类型字节数 ...
随机推荐
- kibana 开发工具介绍
kibana上查看es集群节点信息 get /_cat/nodes?v ip heap.percent ram.percent cpu load_1m load_5m load_15m node.ro ...
- Kubernetes的pod控制器及ReplicaSet控制器类型的pod的定义
为什么需要Pod Kubernetes项目之所以这么做的原因: 因为Kubernetes是谷歌公司基于Borg项目做出来的,谷歌工程师发现,他们部署的应用往往存在这进程与进程组的关系.具体说呢,就是这 ...
- WLC Crash采集什么信息?
WLC和思科的路由器交换机不同,Cisco的WLC采用的是AireOS. 如果WLC crash或无故重启,可以尝试采集如下信息: AireOS WLC version 8.0.140.0 or hi ...
- 杭电1004 Let the Balloon Rise
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- 收藏---wordpress搭建出来的blog
http://blog.luofei.org/2012/02/painters-and-paintings-through-the-eyes-of-faith/
- nginx反向代理实战之轮询、Ip_hash、权重
实验环境 192.168.200.111 web1 centos7 192.168.200.112 web2 centos7 192.168.200.113 wev3 centos7 三台主机环境: ...
- idea通过Ctrl+鼠标滚轮放大/缩小字体
- github日常的基本命令
git 常用命令 git clone 仓库地址 -从远端克隆项目 git pull -从远端拉取代码 git pull -p -从远端拉取代码和分支 提交代码流程: git add xxx -添加到暂 ...
- 吴裕雄--天生自然ORACLE数据库学习笔记:其它数据对象
create index emp_deptno_index on emp(deptno) pctfree tablespace users; create bitmap index emp_salar ...
- 模拟服务容器Ioc
服务容器是一个用于管理类依赖和执行依赖注入的强大工具. 一个类要被容器所能够提取,必须要先注册至这个容器.既然称这个容器叫做服务容器,那么我们需要某个服务,就得先注册.绑定这个服务到容器,那么提供服务 ...