宏的妙用

1、概述

C++中出了const关键字以后,宏定义常量的功能已经不在被推荐使用。这使 得宏似乎没有了用武之地。实际上,宏还可以做很多事情,笔者也难以全部列举 。这里,仅仅列举几个典型的用法,希望大家能够从中获益。

2、实现多环境兼容

常见的情况是,我们实现了一个函数,希望它只在某种编译条件满足是被编译和使用。例如,我希望在源码中插入调试语句,以便以Debug方式运行时能够 通过调试信息观察程序运行情况。但是,在产品发售给用户时,我又希望这些调 试信息不要输出,以降低代码尺寸,提高运行性能。 这一问题的解决方法就是 使用宏。根据条件编译指令,对于不同的编译条件,提供不同的实现。例如:我们希望在特定的位置向日志中写入当前行号和文件名,以判断对应代码是否被执 行到,可以使用下面的宏:

#ifdef _DEBUG
    #define TRACE_FILE_LINE_INFO() do{\
      CString str;\
      str.Format(_T("file=%s,line=%u\r\n",__FILE__,__LINE__);\
      CFile file("logfile.txt");\
      file.Write(str,str.GetLength());\
    }while(0)
    #else
    #define TRACE_FILE_LINE_INFO()
    #endif

上面这段代码通过#ifdef #else #endif三个条件编译 指令,根据_DEBUG定义情况(该宏用于区分DEBUG版本和Release版本),决定了 具体的TRACE_FILE_LINE_INFO宏函数的实现。使用者可以用如下方法使用

TRACE_FILE_LINE_INFO();//这里显示行号和文本信息

当然 ,采用其他方式也可以实现这一功能,但是使用宏有以下特殊好处: 只有需要 的代码才会被编译,减少了符号表的尺寸,也减少了代码尺寸 宏在编译时被展 开,因此用于表示代码位置的__FILE__,__LINE__宏可以起作用,如果用函数实 现,这两个宏则不能起作用。

时间: 2024-09-15 12:25:52

宏的妙用的相关文章

省时省力!妙用Word宏输入特殊符号

在进行http://www.aliyun.com/zixun/aggregation/10466.html">文字排版时经常要 插入字符,但在符号框中 查找费时费力又费眼! 其实,我们可以利用"宏"来为我们解决这个问题.对于一些常用的符号(如"$"),可以使用宏来使工作简化.具体方法是: 1. 首先,依次选择"工具→宏→录制新宏"菜单命令,接着弹出"录制宏"界面(如图1). 图1 2. 在"宏名&qu

妙用Word中的宏隐藏Word文档内容

在 多人共用的电脑中,为了 防止别人看到自己的秘密,每个人对各自存放的文档都采取了一定的保护措施,要么给文件或文件夹设置隐藏属性,要么对文档进行密码保护,但这些都是俗招!笔者最近另辟蹊径,发现了一个保护http://www.aliyun.com/zixun/aggregation/34073.html">Word文档的新招,只要同时按下三个键即可将文档内容隐藏,别人打开后 里面空空如也. 第一步:启动Word,执行"工具→宏→录制新宏--"命令,打开"录制宏&

linux exec和文件描述符妙用技巧(转)

  最近在看<精通unix shell脚本编程>时,看到exec<$1 exec 1>$OUTFILE,一下看的我就蒙了.网上看了大半天,终于搞定,记录如下.对于 Linux 而言,所有对设备和文件的操作都使用文件描述符来进行的.文件描述符是一个非负的整数,它是一个索引值,并指向内核中每个进程打开文件的记录表.当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数.通常,一个进程启动时,都会打开 3 个文件

offsetof与container_of宏[总结]

1.前言 今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大.offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址来获取结构体的地址.两个宏设计的很巧妙,值得学习.linux内核中有着两个宏的定义,并在链表结构中得到应用.不得不提一下linux内核中的链表,设计的如此之妙,只需要两个指针就搞定了.后续认真研究一下这个链表结构. 2.offsetof宏 使用offsetof宏需要包含stddef.h头文件,实例可

来看看百度工具栏的妙用

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 你们知道百度工具栏的妙用吗?有装过软件的人都知道,现在很多安装软件都嵌入这些工具栏,你知道为什么吗?这些都是Google和百度花很大价钱推广自已的工具栏,以前,Google是用Alexa的数据,现在Google和百度都推出自已的工具栏来搜集这些数据,只不过不在这些工具栏上体现这些数据排名罢了,但他们的排名算法中却包含这些数据.当网站刚刚建立的

第二届中国中小企业投融资交易会在京召开—暨妙资财富盈余宝首发

中介交易 SEO诊断 淘宝客 云主机 技术大厅 2014年7月7日星期一,第二届中国中小企业投融资交易会(以下简称投融会)在北京国家会议中心拉开帷幕. (投融会开幕式及参会领导) 原全国人大副委员长成思危,中国人民银行副行长刘士余.副司长林建华.工业和信息化部总工程师朱宏任.中小企业司副司长韦向群.中国银行监督管理委员会小微企业金融服务办公室处长张志.中国证券监督管理委员会市场监管部徐瑞.中国银行业协会副秘书长张芳.中国开发区协会会长师荣耀.中国投资协会会长张汉亚.中国融资担保业协会主任王喆.中

互联网颠覆传统产业大学生村官要跟李彦宏学互联网思维

"涧沟村是樱桃种植的重点村,但多年来产量高销路差,互联网思维能怎么帮我们?"来自北京市门头沟区的妙峰山镇涧沟村的村党支部书记助理姜正红,在"大学生村官开展农村信息化行动活动"现场迫切地提问.5月11日,来自全国110名优秀大学生村官聚集在山东西霞口村,参加由中组部.农业部与百度公司联合开展的"金凤凰计划"正式启动会,这些中国最基层的大学生村官对互联网思维和互联网营销表现出浓厚的兴趣.去年5月,百度创始人李彦宏曾表示,"中国经济的后发优势

奥运火炬手李彦宏的故事:200米和8年

6月26号,互联网巨子李彦宏来到家乡山西省会太原,以太原第四棒奥运火炬手的身份,将圣火祥云向前传递了200米. 200米,一个看似很短的距离,但看着神采奕奕的李彦宏高举火炬向前进发的时候,我们不由想起了李彦宏和他一手缔造的百度过去8年来所走过的岁月--正是在过去8年的艰苦创业,李彦宏和百度一路攀升到足以令中国骄傲的程度.李彦宏在自己所属的互联网领域,在世界范围内不断创造着奇迹.这种"追求卓越"的精神,和奥运"更快.更高.更强"的口号互相呼应. 李彦宏传递圣火火炬手的

陈天桥和李彦宏霸气侧漏

首先恭喜热火队获得总冠军,更要祝贺小皇帝詹姆斯终于化茧成蝶,对其的种种非议有可能暂时平息一些,不过未来等待皇帝的应该是起码三五个的总冠军,这样才能够配得上皇帝这个霸气的称号. 接着来说说最近看的两篇很是霸气的网络业的新闻稿,恩,网络业虽然是最鲜活和生动的新经济体,但是仍然不可避免的和传统的小陋习各种小结合:这两篇霸气侧漏的新闻稿,就是很有联播范儿的新闻体~蛮搞笑的,网络业的企业家们难道也还抱着浓厚的官本位吗? 最侧漏的是盛大陈天桥的一篇新闻稿,看起来应该是他们公关部写的吧?恩,标题是<"我