壹佰网站建设,宜昌 网站建设,网络营销师资格证有什么用,wordpress 配置说明assert宏的原型定义在assert.h中#xff0c;其作用是如果它的条件返回错误#xff0c;则终止程序执行 #include assert.hvoid assert( int expression ); assert的作用是现计算表达式 expression #xff0c;如果其值为假#xff08;即为0#xff09;assert.h中其作用是如果它的条件返回错误则终止程序执行 #include assert.hvoid assert( int expression ); assert的作用是现计算表达式 expression 如果其值为假即为0那么它先向stderr打印一条出错信息然后通过调用 abort 来终止程序运行 已放弃使用assert()的缺点是频繁的调用会极大的影响程序的性能增加额外的开销。在调试结束后可以通过在包含#include assert.h的语句之前插入 #define NDEBUG 来禁用assert调用示例代码如下 #include stdio.h#define NDEBUG#include assert.h 用法总结与注意事项 1在函数开始处检验传入参数的合法性如 int resetBufferSize(int nNewSize){ //功能:改变缓冲区大小, //参数:nNewSize 缓冲区新长度 //返回值:缓冲区当前长度 //说明:保持原信息内容不变 nNewSize0表示清除缓冲区 assert(nNewSize 0); assert(nNewSize MAX_BUFFER_SIZE); ...} 2每个assert只检验一个条件因为同时检验多个条件时如果断言失败无法直观的判断是哪个条件失败如 不好 assert(nOffset0 nOffsetnSizem_nInfomationSize); 好 assert(nOffset 0);assert(nOffsetnSize m_nInfomationSize); 3不能使用改变环境的语句因为assert只在DEBUG个生效如果这么做会使用程序在真正运行时遇到问题如 错误 assert(i 100); 这是因为如果出错比如在执行之前i100那么这条语句就不会执行那么i这条命令就没有执行。 正确 assert(i 100); i; 4assert和后面的语句应空一行以形成逻辑和视觉上的一致感。 5有的地方assert不能代替条件过滤。 转自http://www.cnblogs.com/ggzss/archive/2011/08/18/2145017.html C/C中一个#和两个##的意思 原文链接http://thatax.blog.163.com/blog/static/20892680200882391827116/ ##(两个井号)和#(一个井号)都是什么意思 连接符 ##(两个井号) 不知道什么符 #(一个井号) ## 连接符号由两个井号组成其功能是在带参数的宏定义中将两个子串(token)联接起来从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释 #符是把传递过来的参数当成字符串进行替代。 假设程序中已经定义了这样一个带参数的宏 #define PRINT( n ) printf( token #n %d, token##n ) 同时又定义了二个整形变量 int token9 9; 现在在主程序中以下面的方式调用这个宏 PRINT( 9 ); 那么在编译时上面的这句话被扩展为 printf( token 9 %d, token9 ); 注意到在这个例子中PRINT(9);中的这个”9”被原封不动的当成了一个字符串与”token”连接在了一起从而成为了token9。而#n也被”9”所替代。 可想而知上面程序运行的结果就是在屏幕上打印出 token99 还有点不明白?! 再来一个例子: #define PRINT( n ) printf( token #n %d, game##n ) int token9 9; int game9 99; 调用: PRINT(9); 屏幕上打印出: token9 99转载于:https://www.cnblogs.com/hoojjack/p/3845105.html