诊断<assert.h>  assert #include <assert.h> void assert(int exp); assert宏用于为程序增加诊断功能.当assert(exp)执行时,如果exp为0,则在标准出错输出流stderr输出一条如下所示的信息: Assertion failed: expression, file filename, line nnn 然后调用abort终止执行.其中的源文件名filename和行号nnn来自于预处理宏__FILE__和__LI…
字符类测试<ctype.h> 头文件<ctype.h>中说明了一些用于测试字符的函数.每个函数的变量均为int类型,变量的值必须是EOF或可用unsigned char类型表示的字符,函数的返回值为int类型.如果变量满足所指定的条件,那么函数返回非0值(表示真):否则返回值为0(表示假).这些函数包括2.1-2.11. 在7位ASCII字符集中,可打印字符是从0x20(' ')到0x7E('~')之间的字符:控制字符是从0(NUL)到0x1F(US)之间的字符和字符0x7F(DE…
last modified: 2010-05-28 输入与输出<stdio.h> 头文件<stdio.h>定义了用于输入和输出的函数.类型和宏.最重要的类型是用于声明文件指针的FILE.另外两个常用的类型是size_t和fpos_t,size_t是由运算符sizeof产生的无符号整类型:fpos_t类型定义能够唯一说明文件中的每个位置的对象.由头部定义的最有用的宏是EOF,其值代表文件的结尾. 1.1 文件操作 1.1.1 fopen #include <stdio.h>…
assert宏 适用于软件测试.调试.排错 被除数不能为0,assert可以用于检测被除数是否为0 #define _CRT_SECURE_NO_WARNINGS //#define NDEBUG//关闭静态断言,必须放在头文件上方 #include <stdio.h> #include <stdlib.h> #include <assert.h>//静态断言的头文件 main() { double db1, db2; scanf("%lf%lf",…
实用函数<stdlib.h> 在头文件<stdlib.h>中说明了用于数值转换.内存分配以及具有其他相似任务的函数. 1 atof #include <stdlib.h> double atof(const char *str); 把字符串str转换成double类型.等价于:strtod(str, (char**)NULL). 2 atoi #include <stdlib.h> int atoi(const char *str); 把字符串str转换成i…
字符串函数<string.h> 在头文件<string.h>中定义了两组字符串函数.第一组函数的名字以str开头:第二组函数的名字以mem开头.只有函数memmove对重叠对象间的拷贝进行了定义,而其他函数都未定义.比较类函数将其变量视为unsigned char类型的数组. 1 strcpy #include <string.h> char *strcpy(char *str1, const char *str2); 把字符串str2(包括'\0')拷贝到字符串str…
日期与时间函数<time.h> 头文件<time.h>中说明了一些用于处理日期和时间的类型和函数.其中的一部分函数用于处理当地时间,因为时区等原因,当地时间与日历时间可能不相同.clock_t和time_t是两个用于表示时间的算术类型,而struct tm则用于存放日历时间的各个成分.tm的各个成员的用途及取值范围如下: int tm_sec; /* 秒,0-61 */ int tm_min; /* 分,0-59 */ int tm_hour; /* 时,0-23 */ int t…
assert的初步认识 assert宏指令是用来诊断程序是否有误的,函数原型如下 void assert(int expression) 那为什么我们要使用assert而不用printf呢?因为assert可以帮我们监测出是哪个条件不满足了,而且可以直观地显示出是代码中的哪一行出问题了,并且,当我们不打算用assert来诊断程序的时候,可以很方便地通过宏定义#define NDEBUG 取消assert的诊断.相比于自己写一个一个printf,自己判断程序哪一行出错,显然assert更有优势.…
程序中通常会出现三种错误:用户错误.运行期错误以及异常 欢迎关注我的个人博客:www.wuyudong.com, 更多精彩文章与您分享 标准库函数setjmp和longjmp 在C语言中,标准库函数setjmp和longjmp形成了结构化异常工具的基础.简单的说就是setjmp实例化处理程序,而longjmp产生异常 setjmp和longjmp是C语言所独有的,它们部分弥补了C语言有限的转移能力.与刺激的abort()和exit()相比,goto语句看起来是处理异常的更可行方案.不幸的是,go…
//模拟实现库函数strcat函数 #include <stdio.h> #include <string.h> #include <assert.h> char * my_strcat(char *dst, const char *src) { char *start = dst; int len_dst = strlen(dst); dst+=len_dst; while (*dst++ = *src++) { ; } return start; } int mai…