stdlib.h:
stdlib.h里面定义了五种类型、一些宏和通用工具函数。 类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。
time.h
time.h是C/C++中的日期和时间头文件。得到从程序启动到此次函数调用时累计的毫秒数。
NVIDIA面试笔试题之一:
assert.h是c标准库的一个头文件,该头文件的主要目的就是提供一个assert的宏定义。
assert只是对所给的表达式求值,就像if判断语句中一样,然后如果该值为真则正常运行,否则报错,并调用abort(),产生异常中断,exit出来。
该宏可以屏蔽掉,只需在包含assert.h之前#define NDEBUG,想开再#undef。从这里可以看出预处理带来的方便。
函数名: assert
功 能: 测试一个条件并可能使程序终止
用 法: void assert(int test);
程序例:
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
struct ITEM {
int key;
int value;
};
void additem(struct ITEM *itemptr) {
assert(itemptr != NULL);
}
int main(void)
{
additem(NULL);
return 0;
}
assert() 函数用
1 法
2 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
3 #include <assert.h>
4 void assert( int expression );
5 assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,
6 然后通过调用 abort 来终止程序运行。
7 请看下面的程序清单badptr.c:
8 #include <stdio.h>
9 #include <assert.h>
10
11
12 #include <stdlib.h>
13
14
15 int main( void )
16
17
18 {
19 FILE *fp;
20 fp = fopen( "test.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件
21 assert( fp ); //所以这里不会出错
22
23 fclose( fp );
24
25 fp = fopen( "noexitfile.txt", "r" );//以只读的方式打开一个文件,如果不存在就打开文件失
26 assert( fp ); //所以这里出错
27 fclose( fp ); //程序永远都执行不到这里来
28 return 0;
29 }
30 [root@localhost error_process]# gcc badptr.c
31 [root@localhost error_process]# ./a.out
32 a.out: badptr.c:14: main: Assertion `fp' failed.
33 已放弃
34 使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。
35 在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:
36 #include <stdio.h>
37 #define NDEBUG
38 #include <assert.h>
39 用法总结与注意事项:
40 1)在函数开始处检验传入参数的合法性
41 如
42 int resetBufferSize(int nNewSize)
43 {
44 //功能:改变缓冲区大小,
45
46
47 //参数:nNewSize 缓冲区新长度
48 //返回值:缓冲区当前长度
49 //说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区
50 assert(nNewSize >= 0);
51 assert(nNewSize <= MAX_BUFFER_SIZE);
52 }
53 2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失
54 不好: assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
55 好: assert(nOffset >= 0);
56 assert(nOffset+nSize <= m_nInfomationSize);
57 3)不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题
58 错误: assert(i++ < 100)
59 这是因为如果出错,比如在执行之前i=100,那么这条语句就不会执行,那么i++这条命令就没有执行。
60
61
62 正确: assert(i < 100)
63 i++;
64 4)assert和后面的语句应空一行,以形成逻辑和视觉上的一致感
65 5)有的地方,assert不能代替条件过滤
66 注意:当对于浮点数:
67 #include<assert.h>
68 // float pi=3.14;
69 // assert(pi=3.14); //
70
71 float pi=3.14f;
72 assert (pi=3.14f);
73 ---------------------------------------------------------
74 在switch语句中总是要有default子句来显示信息(Assert)。
75 int number = SomeMethod();
76 switch(number)
77 {
78 case 1:
79 Trace.WriteLine("Case 1:");
80 break;
81 case 2:
82 Trace.WriteLine("Case 2:");
83 break;
84 default :
85 Debug.Assert(false);
86 break;
87 }
88
89 函数名: assert 功 能: 测试一个条件并可能使程
序终止 用 法: void assert(int test); 例 如: assert(item != NULL); //如果条件不成立,则程序终止
原文链接: https://www.cnblogs.com/herizai/archive/2013/05/16/3081438.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/88818
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!