linux注意的一些地方
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注意的一些地方相关推荐
- linux8000端口一般是什么端口,Linux下有什么地方用到了8000端口
满意答案 netstat -tunlp |grep 8000 用这个命令就能看到是哪个程序了,最右面的是程序名 我这没有8000的程序,列一下22的 [root@localhost tmp]# net ...
- Windows 比 Linux 好?我有 13 个反对理由
[CSDN 编者按]对于广大开发者来说,工作体验好坏与计算机系统有着莫大的关联.我在这里说一句 Linux 比 Windows 更好,谁赞成,谁反对? 编译 | 弯月 责编 | 张文 出品 | C ...
- Linux 编程经典书籍推荐
成为一名精通 Linux 程 序设计的高级程序员一直是不少朋友孜孜以求的目标.根据中华英才网统计数据,北京地区 Linux 程序员月薪平均为 Windows 程序员的 1.8 倍.Java 程序员的 ...
- 《Linux嵌入式实时应用开发实战(原书第3版)》——3.5 Linux文件系统
本节书摘来自华章计算机<Linux嵌入式实时应用开发实战(原书第3版)>一书中的第3章,第3.5节,作者:(美)Doug Abbott 更多章节内容可以访问云栖社区"华章计算机& ...
- 为学Linux,我看了这些书
去年开始,抱着学习的态度开始了我的Linux学习,到现在,差不多一年了,收获很多,不敢说精通Linux,但是,还是对得起"略懂"这两个字的.这一年里我看了很多书,细细数下,大概15 ...
- bash: 无法为立即文档创建临时文件: 权限不够_世界顶级Linux大牛耗时三年总结出3000页Linux文档...
众所皆知的,Linux的核心原型是1991年由托瓦兹(Linus Torvalds)写出来的,但是托瓦兹为何可以写出Linux这个操作系统?为什么它要选择386的计算机来开发?为什么Linux的发展可 ...
- 驳Linux不娱乐 堪比Win平台中十款播放器
播放器在我们日常生活中扮演着非常重要的角色,在Windows操作系统中,播放器被应用的非常广泛,不但我们可以听音乐,甚至还可以听广播,制作铃声,下载音乐等等.而在Linux发行版中,缺少娱乐性一直性W ...
- 【linux回炉 档案权限与目录配置】
Linux 的档案权限不目录配置 Linux 最优秀的地方之一,就在于他的多人多任务环境.而为了让各个使用者具有较保密的档案数据,因此档案的权限 管理就变的重重要了. Linux 一般将档案可存取的身 ...
- 鸟哥的Linux私房菜(基础篇)- 第十七章、程序管理与 SELinux 初探
第十七章.程序管理与 SELinux初探 最近升级日期:2009/09/11 一个程序被加载到内存当中运行,那么在内存内的那个数据就被称为程序(process).程序是操作系统上非常重要的概念,所有系 ...
最新文章
- 【风控体系】携程基于大数据分析的实时风控体系
- 深度探索C++ 对象模型(5)-Initialization list(2)
- 《C语言解惑》—— 第一篇 C语言编程中的对与错
- s3c6410裸机程序(1)
- Java Application 直接通过jndi连接数据库
- Web使用热敏打印小票(IE环境)
- 教你如何窃取网络信息
- ECS入门之Hello World
- npm包的语义版本控制(Semantic Versioning of Packages)
- 第一次总结:整体框架
- 聚类及聚类算法的分类
- 5000预算组装台式机配置清单
- 图解 Cisco IOS 命名规范
- 高速交警的救命忠告!常跑高速的一定要看!
- java中int count什么意思_int groupCount()
- 如何在不重装系统的情况下换固态硬盘?
- 如何调整DOSBox窗口大小
- 百度、腾讯、滴滴,如何看2019智能网联汽车发展 | 2019互联网岳麓峰会...
- Unity隐身 观察隐身
- RC522 - NFC刷卡模块
热门文章
- MS CRM 2011 C#中获取Web Resource
- CSAcademy Or Problem
- CSS3透明背景表单
- bupt summer training for 16 #8 ——字符串处理
- fgetcsv()函数
- mysql语法学习(一)__Instances__表
- Mac升级到Yosemite后默认的php版本不支持imagetfftext函数问题解决
- #周末课堂# 赵扬老师 Android系列课程【ListView完全解析、Memory in Android】(火热报名中~~~)...
- WSUS服务器的建立以及客户端发布
- 华为网络设备上的常用安全技术(一)