assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行

#include <assert.h>void 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 缓冲区新长度
  //返回值:缓冲区当前长度
  //说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区
  assert(nNewSize >= 0);
  assert(nNewSize <= MAX_BUFFER_SIZE);
  ...
}

  2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败,如:

  不好:

assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);

  好:

assert(nOffset >= 0);assert(nOffset+nSize <= m_nInfomationSize);

  3)不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题,如:

  错误:

assert(i++ < 100);

  这是因为如果出错,比如在执行之前i=100,那么这条语句就不会执行,那么i++这条命令就没有执行。

  正确:

 assert(i < 100); i++;

  4)assert和后面的语句应空一行,以形成逻辑和视觉上的一致感。

  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”所替代。

可想而知,上面程序运行的结果就是在屏幕上打印出

token9=9

还有点不明白?!

再来一个例子:

#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

linux注意的一些地方相关推荐

  1. linux8000端口一般是什么端口,Linux下有什么地方用到了8000端口

    满意答案 netstat -tunlp |grep 8000 用这个命令就能看到是哪个程序了,最右面的是程序名 我这没有8000的程序,列一下22的 [root@localhost tmp]# net ...

  2. Windows 比 Linux 好?我有 13 个反对理由

    [CSDN 编者按]对于广大开发者来说,工作体验好坏与计算机系统有着莫大的关联.我在这里说一句 Linux 比 Windows 更好,谁赞成,谁反对? 编译 | 弯月   责编 | 张文 出品 | C ...

  3. Linux 编程经典书籍推荐

    成为一名精通 Linux 程 序设计的高级程序员一直是不少朋友孜孜以求的目标.根据中华英才网统计数据,北京地区 Linux 程序员月薪平均为 Windows 程序员的 1.8 倍.Java 程序员的 ...

  4. 《Linux嵌入式实时应用开发实战(原书第3版)》——3.5 Linux文件系统

    本节书摘来自华章计算机<Linux嵌入式实时应用开发实战(原书第3版)>一书中的第3章,第3.5节,作者:(美)Doug Abbott 更多章节内容可以访问云栖社区"华章计算机& ...

  5. 为学Linux,我看了这些书

    去年开始,抱着学习的态度开始了我的Linux学习,到现在,差不多一年了,收获很多,不敢说精通Linux,但是,还是对得起"略懂"这两个字的.这一年里我看了很多书,细细数下,大概15 ...

  6. bash: 无法为立即文档创建临时文件: 权限不够_世界顶级Linux大牛耗时三年总结出3000页Linux文档...

    众所皆知的,Linux的核心原型是1991年由托瓦兹(Linus Torvalds)写出来的,但是托瓦兹为何可以写出Linux这个操作系统?为什么它要选择386的计算机来开发?为什么Linux的发展可 ...

  7. 驳Linux不娱乐 堪比Win平台中十款播放器

    播放器在我们日常生活中扮演着非常重要的角色,在Windows操作系统中,播放器被应用的非常广泛,不但我们可以听音乐,甚至还可以听广播,制作铃声,下载音乐等等.而在Linux发行版中,缺少娱乐性一直性W ...

  8. 【linux回炉 档案权限与目录配置】

    Linux 的档案权限不目录配置 Linux 最优秀的地方之一,就在于他的多人多任务环境.而为了让各个使用者具有较保密的档案数据,因此档案的权限 管理就变的重重要了. Linux 一般将档案可存取的身 ...

  9. 鸟哥的Linux私房菜(基础篇)- 第十七章、程序管理与 SELinux 初探

    第十七章.程序管理与 SELinux初探 最近升级日期:2009/09/11 一个程序被加载到内存当中运行,那么在内存内的那个数据就被称为程序(process).程序是操作系统上非常重要的概念,所有系 ...

最新文章

  1. 【风控体系】携程基于大数据分析的实时风控体系
  2. 深度探索C++ 对象模型(5)-Initialization list(2)
  3. 《C语言解惑》—— 第一篇 C语言编程中的对与错
  4. s3c6410裸机程序(1)
  5. Java Application 直接通过jndi连接数据库
  6. Web使用热敏打印小票(IE环境)
  7. 教你如何窃取网络信息
  8. ECS入门之Hello World
  9. npm包的语义版本控制(Semantic Versioning of Packages)
  10. 第一次总结:整体框架
  11. 聚类及聚类算法的分类
  12. 5000预算组装台式机配置清单
  13. 图解 Cisco IOS 命名规范
  14. 高速交警的救命忠告!常跑高速的一定要看!
  15. java中int count什么意思_int groupCount()
  16. 如何在不重装系统的情况下换固态硬盘?
  17. 如何调整DOSBox窗口大小
  18. 百度、腾讯、滴滴,如何看2019智能网联汽车发展 | 2019互联网岳麓峰会...
  19. Unity隐身 观察隐身
  20. RC522 - NFC刷卡模块

热门文章

  1. MS CRM 2011 C#中获取Web Resource
  2. CSAcademy Or Problem
  3. CSS3透明背景表单
  4. bupt summer training for 16 #8 ——字符串处理
  5. fgetcsv()函数
  6. mysql语法学习(一)__Instances__表
  7. Mac升级到Yosemite后默认的php版本不支持imagetfftext函数问题解决
  8. #周末课堂# 赵扬老师 Android系列课程【ListView完全解析、Memory in Android】(火热报名中~~~)...
  9. WSUS服务器的建立以及客户端发布
  10. 华为网络设备上的常用安全技术(一)