C语言中的宏定义怎么用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中的宏定义怎么用?相关的知识,希望对你有一定的参考价值。
C语言中的宏定义用法分为两种。
1、不带参数的宏定义比较简单,就是用一个指定的标识符来代表一个字符串。它的一般形式为“#define 标识符 字符串”,例如#define E 2.718281828459。这种方法使用户能以一个简单的名字代替一个长的字符串。
2、带参数的宏定义不是仅仅进行简单的字符串替换,还要进行参数替换。其定义的一般形式为;“#define 标识符(宏名)(参数表) 字符串”,字符串中包含在括号中所指定的参数。例如#define S(a,b) a*b area=S(3. 2)。
扩展资料:
宏定义只占编译时间,函数调用则占用运行时间(分配单元,保存现场,值传递,返回),每次执行都要载入,所以执行相对宏定义会较慢。
使用宏定义次数多时,宏定义展开后源程序很长,因为每展开一次都使程序增长,但是执行起来比较快一点(这也不是绝对的,当有很多宏定义展开,目标文件很大,执行的时候运行时系统换页频繁,效率就会低下)。而函数调用不使源程序变长。
参考技术A宏定义的格式如下:
#define 标识符 字符串
其中,#表示这是一条预处理命令;#define为宏定义命令;“标识符”为宏定义的宏名;“字符串”可以上常数、表达式、格式串等。
举例如下:
#define PI 3.14 // 对3.14进行宏定义,宏名为PIvoid main()
printf("%f", PI); // 输出3.14
参考技术B 在想对特定的内容定义的时候用
参考网址 http://baike.baidu.com/view/2076445.htm
有问题请追问 满意记得采纳来自:求助得到的回答本回答被提问者采纳 参考技术B #define 宏名称 定值
讲下c语言中的宏
我在大学的C++教材上没学过这种宏的使用,请解释下下面的代码是什么意思?
#define DECLARE_DYNAMIC(class_name)
protected:
static CRuntimeClass* PASCAL _GetBaseClass();
public:
static const AFX_DATA CRuntimeClass
class##class_name;
virtual CRuntimeClass* GetRuntimeClass() const;
#define _DECLARE_DYNAMIC(class_name)
protected:
static CRuntimeClass* PASCAL _GetBaseClass();
public:
static AFX_DATA CRuntimeClass class##class_name;
virtual CRuntimeClass* GetRuntimeClass() const;
#else
#define DECLARE_DYNAMIC(class_name)
public:
static const AFX_DATA CRuntimeClass class##class_name;
virtual CRuntimeClass* GetRuntimeClass() const;
#define _DECLARE_DYNAMIC(class_name)
public:
static AFX_DATA CRuntimeClass class##class_name;
virtual CRuntimeClass* GetRuntimeClass() const;
#endif
反斜杠 表示下面的行应当和本行在同一行。
宏 [#define 这串字符串 一大堆东西]
作用是以后遇到 这串字符串 就替换为 一大堆东西。
#define DECLARE_DYNAMIC(class_name) 反斜杠一大堆东西
因为有(class_name),叫 变参宏,
这串字符串 是 DECLARE_DYNAMIC(变参),替换作业时,一大堆东西里的 class_name 也要用 实参 代替。
#ifdef _AFXDLL
#define DECLARE_DYNAMIC(class_name) 反斜杠一大堆东西
#else
#define DECLARE_DYNAMIC(class_name) 反斜杠 另外一大堆东西
#endif
如果定义了 _AFXDLL,则 这串字符串 用 一大堆东西 替换,class_name 也用实参替换
否则,这串字符串 用 另一大堆东西 替换,class_name 也用实参替换
## 表示 前后两 token 连接
读一下参考资料,了解 # 和 ## 应用,如何做宏替代。
参考资料:http://www.kuqin.com/language/20080721/11906.html
参考技术A 这应该是MFC类库的一段声明。主要关于运行时识别的东西。要解释清楚你这里的东西篇幅实在太多了。我挑几个给你距离说明好了。
第一句的DECLARE_DYNAMIC宏:
#define DECLARE_DYNAMIC(CLASS)
.
.
.
#endif
以上都是这个宏的定义。如果以后你在文件中写DECKARE_DYNAMIC(CView).那么这个宏就会自动帮你完成CView的声明工作。
宏里面“##”符号的意思是连接两个字符串 执行完毕之后生成的类名是classCView.
在你这个宏之前应该还少了一句#ifndef XXX。这样这个宏才能完整
整个的意思是:
if(没有定义XXX)
那么就定义DECLARE_DYNAMIC
else
否则就定义_DECLARE_DYNAMIC
宏只是简单的替换而已。如果想要深入了解MFC。可以看看侯捷老师的《深入浅出MFC》.不过看你的代码,很像那本书上的一段代码。微软的MFC用了太多的宏,确实不好理解。但是请坚持下去,一段时间后你会发现 ---- “不过如此” 参考技术B 要掌握下面几个:
……
#
##
一些设计的细节,防止产生bug
具体参考酷勤:
www.kuqin.com/language/20080721/11906.html本回答被提问者采纳
以上是关于C语言中的宏定义怎么用?的主要内容,如果未能解决你的问题,请参考以下文章