目前位置: VCer资源中心 >>> VCer文章 >>> C++/MFC基础

[本帖已阅读1221次 分值75 回复0次] 张贴资源 发回信箱 控制面板

c语言的宏

提供者:oases2008 张贴时间:2005-01-01 00:00:00.0 出处:http://www.jblook.cn 作者:不祥

c语言的宏(2005-01-01 00:00:00.0)


oases2008


 
级别: VCer小兵
头衔: VCer会员

经验: 258
作品: 3
分会: 华北分会
注册: 2007-01-25 12:00:19.0
登录: 2007-10-30 16:38:36.0
关于c语言的宏,我肯定许多人一定有过惨痛的经验。

几年前一个典型的错误让我找了一天:

#define MACRO_1 5

#define MACRO_2 MACRO_1 + 1

int a = MACRO_2 * 3;

我希望的结果当然是a = 18,可是实际上大家应该都知道a是 5 + 1 * 3 = 8.

我以为这样的错误我不会再犯,可是前一阵我还是被一个几乎相同的错误给消耗了

一个下午:

#define PHY_ADDER 0x400000

#define PHY_ADDER_2 PHY_ADDER + 0x100000

int *p = (int *)PHY_ADDER_2;

指针p的值是多少?0x500000?那只是我想要的结果。

p = 0x400000 + 0x100000 * sizeof(int);

在我的机器上等于0x800000。你知道为什么吗?

指针的加法有这么点特性,如果你知道p++并不意味着p值只加了1你就知道为什么了。

一定要给你的宏加上括号!!

本文转载自IT网it求职笔试真题库网

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/1000000000326.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

[回复该贴] [加入个人书签]
[投票结果]

A: 评分 10 0% (0 票)
B: 评分 5 0% (0 票)
C: 评分 0 0% (0 票)
D: 评分 -5 100% (1 票)
E: 评分 -10 0% (0 票)