问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于C++宏定义问题

发布网友 发布时间:2022-05-07 05:21

我来回答

2个回答

热心网友 时间:2023-09-14 11:16

C++
宏定义
将一个
标识符
定义为一个字符串,
源程序
中的该标识符均以指定的字符串来代替。前面已经说过,
预处理命令
不同于一般C++语句。因此预处理命令后通常不加分号。这并不是说所有的预处理命令后都不能有分号出现。由于宏定义只是用宏名对一个字符串进行简单的替换,因此如果在宏定义命令后加了分号,将会连同分号一起进行置换。
  定义带参数的宏时,宏体中与参数名相同的字符串适当地加上
圆括号
是十分重要的,这样能够避免
  可能产生的错误。例如,对于宏定义:
  
#define
SQ(x)
x*x
  当程序中出现下列语句:
  m=SQ(a+b);
  替换结果为:
  m=a+b*a+b;
  这可能不是我们期望的结果,如果需要下面的替换结果:
  m=(a+b)*(a+b);
  应将宏定义修改为:
  #define
SQ(x)
(x)*(x)
  对于带参的宏定义展开置换的方法是:在程序中如果有带
实参
的宏(如"SUB(2,3)"),则按"#define"命令行中指定的字符串从左到右进行置换。如果串中包含宏中的
形参
(如a、b),则将程序语句中相应的实参(可以是常量、变量或者表达式)代替形参,如果宏定义中的字符串中的字符不是参数字符(如a-b中的-号),则保留。这样就形成了置换的字符串。

热心网友 时间:2023-09-14 11:17

#ifndef
elemtype_h
#define
elemtype_h
的意思是,如果前面没有定义elemtype_h,那么现在定义elemtype_h
它不需要有值,只是表明是否被定义过,“指魔”说的很对,它是为了防止头文件的重复定义
我举个简单的例子帮助你理解:
你在a.h里定义了一个类a:
class
a{
}
然后在b.h里定义了一个类b,而且引用了a.h:
#include
"a.h"
class
b{
}
编译器在编译时,b.h的实际内容为:
class
a{
}
class
b{
}
这里还没出现错误。
然后你在c.cpp里引用了a.h和b.h:
#include
"a.h"
#include
"b.h"
那么,编译器在编译的时候会把a.h和b.h里的内容原封不动的填进来以代替这两句,这样c.cpp就变为:
class
a{
}
class
a{
}
class
b{
}
你可以很清楚的看到,类a重定义了。
那么,如果我们用到前面提到的宏定义来分别定义a.h和b.h如下:
//a.h
#ifndef
a_h
class
a{
}
#define
a_h
//b.h
#ifndef
b_h
class
b{
}
#define
b_h
那么,c.cpp展开后为:
#ifndef
a_h
class
a{
}
#define
a_h
#ifndef
a_h
class
a{
}
#define
a_h
可以看到,执行第一次class
a的定义时,由于宏a_h未定义,故此时执行类a的定义,并定义a_h,然后执行第二次class
a的定义时,发现a_h已经定义,因此跳过a的再次定义,避免了重定义
希望对你有所帮助!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
畅享好还是荣耀好 怎么向老师请教问题?? ...和是40.15较大数的小数点向左移动一位就等于较小的数,这两_百度知... 两个数的和是40.15,较大数的小数点向左移动一位就等于较小的数这两... 两个数的和是40.15,较大的数的小数点像向左移动一位就等于较小的数... 两个数的和是40.15,较大数的小数点向左移动一位等于较小的数 ...和是40.15较大数的小数点向左移动一位就等于较小的数这两个数分别... 怎么用手机查询农行信用卡余额? 朝阳公园附近有孩子可以托管的地方吗? 华泰证券怎么添加第二张银行卡 茶杯泰迪长大后能蹦上沙发吗 windows宏定义问题 winuser.h和resource.h宏重定义问题 c语言宏定义如何用?用宏定义有什么优点? 小红懂得了珍惜时间作文 C++宏可以被多次重新定义吗? 查账征收改为核定征收怎么办理 要什么手续 核定征收需要网上申报吗 个人经营所得税核定征收怎么申请,哪里能办? 请叫一下各位怎么办理核定征收? 广州梵泰代理的晓星pokm330f能过头戴耳机的折叠测试吗? 先锋SE-MJ512折叠式头戴耳机,怎么样?用过的说下。 word2003怎么使文本显示在单独一页? 求推荐头戴式耳机,降噪,轻便,最好有一些折叠,带着舒服的耳机,价格区间在500~1000左右。 素质拓展训练的起源 拓展训练是什么意思 户外拓展培训的起源 拓展训练在中国的发展史 冯雁平耳软骨隆鼻能保持多久?如何 拓展起源是什么 #define 重定义函数问题 ----宏 与 符号常量----请高手指教一下。。本人菜鸟~~刚学。。谢谢 如何 修改Visual Studio C++ 2015 那些配置的宏 c语言为什么会出现错误:重定义,相同的基函数 推荐几款联想笔记本电脑 只要16-17寸 联想有没有17寸的笔记本电脑 成年茶杯泰迪几个月长牙 有没有人用17寸的笔记本 貌似 华硕的不错 能当台式机用吗 MFC中的CANCEL重定义 为什么17寸的笔记本会很贵? c语言中报错:重定义,不同的基类型。求解释~ 华硕17寸笔记本电脑怎么样 关于DWORD和宏,高手指教 初始化gpio时如何配置重定义功能 C++头文件为什么要一个该 头文件的宏定义 求 贝瓦 好宝宝简谱 这是歌词天蓝蓝,白云飘,背起小书包。 花儿开, 背起小书包是什么儿歌? 如何锻炼腰部肌肉?还有怎样使膝盖有力? 如何锻炼腰部、膝盖? 腰和膝盖不好的人,如何进行运动锻炼