一、 总览

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的更多相关文章

  1. [PHP] PHP源码常用代码中的宏定义

    PHP源码常用代码宏定义:#define 宏名 字符串#表示这是一条预处理命令,所有的预处理命令都以#开头.define是预处理命令.宏名是标识符的一种,命名规则和标识符相同.字符串可以是常数.表达式 ...

  2. object-c 常用判断null的宏定义,如果是null直接返回@""

    #define checkNull(__X__) (__X__) == [NSNull null] || (__X__) == nil ? @"" : [NSString stri ...

  3. C++通过宏定义判断操作系统及编译器

    INTRODUCTION: C++的编译环境千奇百怪,很多时候一些代码在某些编译环境下可用,一旦移到其他环境下,就会干脆Compile Error 对此,我们可以使用C++的宏定义来判断操作系统,从而 ...

  4. (四)静态断言(上),assert,NDEBUG, 以及通过宏定义处理文件包含关系

    一.断言:运行时与预处理时 断言(assertion)是一种编程常用的手段.想必大家都见过 assert 吧.今天我们就来了解一下它. 通常情况下,断言就是将一个返回值总是需要为真的判别式放在语句中, ...

  5. iOS之常用宏定义

    下面我为大家提供一些常用的宏定义! 将这些宏定义 加入到.pch使用 再也不用 用一次写一次这么长的程序了 //-------------------获取设备大小------------------- ...

  6. iOS 日常工作之常用宏定义大全

    转自:http://www.jianshu.com/p/213b3b96cafe 前言: 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间,又有时候忘记怎么定义了 ...

  7. iOS - 常用的宏定义

    1.处理NSLog事件(开发者模式打印,发布者模式不打印) 1 2 3 4 5   #ifdef DEBUG   #define NSLog(FORMAT, ...) fprintf(stderr,& ...

  8. iOS常用宏 定义

    总结了iOS开发过程中的一些常用宏,以后会陆陆续续添加进来. 字符串是否为空 1   #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull c ...

  9. 20个C语言中常用宏定义总结

    01: 防止一个头文件被重复包含 #ifndef COMDEF_H#define COMDEF_H//头文件内容#endif 02: 重新定义一些类型防止由于各种平台和编译器的不同,而产生的类型字节数 ...

随机推荐

  1. dp-简单迷宫捡金币

    链接:https://ac.nowcoder.com/acm/challenge/terminal 吃货LP参加了珠海美食节,每见一家摊位都会大吃一顿,但是如果不加收敛,接下来的日子就只能吃土了,所以 ...

  2. adblock广告过滤

    1.在 img的 src中 出现 ad连在一起的情况,会被adblock过滤掉. 例如 <img id="adasdd" class="ad_mina" ...

  3. SpringBoot 集成JUnit

    项目太大,不好直接测整个项目,一般都是切割成多个单元,单独测试,即单元测试. 直接在原项目上测试,会把项目改得乱七八糟的,一般是单独写测试代码. 进行单元测试,这就需要集成JUnit. (1)在pom ...

  4. 操作系统OS,Python - 生产者消费者模型

    1. 缓冲区(此处用阻塞队列充当),解决消费者和生产者强耦合问题.(生产者和消费者不直接通信) 2. 通过平衡生产者线程和消费者线程,来提高程序整体处理数据速度. 3. 在并发编程中该模式能解决大多数 ...

  5. 使用KVO键值监听

    本文章从五个方面介绍KVO(Key-Value-Observer)键值观察者: (1)功能介绍 (2)使用步骤 (3)应用场景 (4)原理理解 (5)相关的面试题 一 功能介绍 KVO是OC语言对「观 ...

  6. nginx的addition模块在响应的前后报文添加内容与变量的运行原理

    nginx默认未编译此模块:让nginx编译启用此模块 ./configure --prefix=/data/web --sbin-path=/usr/bin --user=nginx --group ...

  7. 【剑指Offer面试编程题】 题目1350:二叉树的深度--九度OJ

    题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 输入: 第一行输入有n,n表示结点数,结点号从1到n.根结点为1. ...

  8. Python将数据保存为txt文件的方法

    f = open('name.txt',mode='w') #打开文件,若文件不存在系统自动创建. #参数name 文件名,mode 模式. #w 只能操作写入 r 只能读取 a 向文件追加 #w+ ...

  9. 1.WEB安全概述

    一.WEB常见的安全性问题简介 XSS(Cross-Site Scripting):跨站脚本攻击漏洞 CSRF(Cross-site request forgery):跨站请求伪造 文件上传漏洞 SQ ...

  10. notepad++一次去掉所有空行,然后加上2个空行

    打开替换窗口,查找我的目标中填写: ^\r\n 替换为中不填,空着, 点击全部替换按钮. 如何给所有行添加2行空行: 打开替换窗口,查找目标中填写: \r\n 替换为中填写: \r\n\r\n\r\n ...