一.宏定义(1)

来源:互联网 发布:鼓机软件 编辑:程序博客网 时间:2024/05/18 00:25

1.     关于宏

    宏在c/c++ 中是个很常用的玩意儿,C语言中如何使用宏C(和C++)中的宏属于编译器预处理的范畴,属于编译期概念(而非运行期概念)

 函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存, 宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)


举个例子来说

现在我们有需求需要经常用到一年的秒秒数的这个常数做计算。

代码如下:

 

#define YEAR_SECONDS365*24*60*60 int _tmain(int argc, _TCHAR* argv[]){       intnYearSecond=YEAR_SECONDS; // 1       printf("%d\n",nYearSecond);       getchar();       return 0;}
       有些人可能会认为这个时候nYearSecond = 365*24*60*60  其实不然,为什么说预编译呢,其实这个时候编译器在编译的时候已经帮你吧 YEAR_SECONDS 计算好了,即 365*24*60*60  = 31536000 (十六进制为 1E13380),怎么验证呢,很简单只用用编译器进入到汇编状态,就可以很清楚的看到这个时候是将1E13380 赋值给了 变量nYearSecond了,如下图:


                                                                                                                                                                                                                                  

2.     常见的宏操作

1        防止头文件重复引用

现在假设我们有头文件

一般的格式是

#ifndef   _A_CLASS_HEADR_H__

#define_A_CLASS_HEADR_H__

 

class TEST{

public:

       TEST(){printf("sssss\n");}

};

 

#endif

 

这样的话如果  _A_CLASS_HEADR_H__ 这个宏已经定义的话那么程序在编译的时候就会跳过下面的代码到 #endif 结束,而不会导致代码重复引用或定义。如果没有定义该宏的话可能就会报重复定义的错误了,举个例子

 如果上面的文件吧两个宏定义注释掉, 那么连续包含两次该头文件 如下:

#include "stdafx.h"#include "stdio.h"#include "Header1.h"#include "Header1.h"#include <Windows.h>using namespace  std; #define YEAR_SECONDS365*24*60*60 int _tmain(int argc, _TCHAR* argv[]){       intnYearSecond=YEAR_SECONDS;#undef YEAR_SECONDS//     nYearSecond=YEAR_SECONDS;       printf("%d  %s\n",nYearSecond,OK);       getchar();       return 0;}


 

我们包含两个相同的头文件就会报:



                                                                                                                                                                                                                    -----未完待续 微笑



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 重庆市住房公积金管理中心 渭南住房公积金查询 咸阳市住房公积金管理中心 宁德住房公积金查询 苏州住房公积金管理中心 太原住房公积金 萍乡市住房公积金个人查询 深圳住房公积金查询余额 长春市住房公积金网 潍坊市住房公积金管理中心 阜阳市住房公积金查询 赣州住房公积金 太原住房公积金查询个人账户 郑州市住房公积金查询 杭州住房公积金管理中心 乐山市住房公积金管理中心 长春住房公积金查询 青海住房公积金查询网 住房公积金管理 宜春住房公积金查询 惠州市住房公积金管理中心 玉林住房公积金查询个人账户 枣庄住房公积金查询 六安住房公积金管理中心 厦门住房公积金查询 渭南市住房公积金个人查询 乐山住房公积金查询个人账户 深圳住房公积金电话多少 南宁住房公积金查询 住房公积金查询电话12329 济宁住房公积金管理中心 宁德市住房公积金查询窗口 兰州市住房公积金查询系统 孝感住房公积金查询 兰州住房公积金查询 滁州住房公积金 上海住房公积金网 个人住房公积金查询网 省住房公积金管理中心 韶关市住房公积金管理中心 长沙住房公积金管理中心