当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

C语言的宏展开讲一下什么是宏展开怎么实现

更新:02-23 整理:39baobao.com
字体:

[让孩子展开想象的翅膀]爱因斯坦说过:“想象比知识更重要。”知识是有限的,而想象可以概括出一切事物,是知识进化的源泉,是人类进步的基础。有实验表明,幼儿时期是人创造能力发展最重要的时期,培养想象力...+阅读

对于C++宏展开,先说一点:

#define功能将源程序文件中出现的对宏的引用展开成相应的宏 定义,由预处理器来完成。经过预处理器处理的源程序与之前的源程序有所有不同,在这个阶段所进行的工作的确只是纯粹的替换与展开,没有任何计算功能。

对于“带参数的宏替换”,可以由下列代码尝试理解下

#include #define min(x,y) ({ typeof(x) _x = (x);typeof(y) _y = (y); (void) (&_x == &_y); _x < _y ? _x : _y; }) //防止x和y为一个表达式和失去了类型检测功能;

#define min_replace(x,y) ({ x < y ? x : y; })

void main()

{

int x=1;

int y=2;

int result = min(x++,y);

printf("没有替换时的运行结果为:%d\n",result);

int x1=1;

int y1=2;

int result1 = min_replace(x1++,y1);

printf("替换之后的运行结果为:%d\n",result1);

return ;

}

需要注意:

宏名和参数表的括号间不能有空格。

宏替换只做替换,不做计算和表达式求解,这一点要格外注意。

函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存。

宏的哑实结合(哑实结合类似于函数调用过程中实参替代形参的过程)不存在类型,也没有类型转换。

宏展开使源程序变长,而函数调用则不会。

本文地址:https://www.39baobao.com/show/29_45803.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

求c语言实现图形界面c c c语言都可以那得学习windows编程了。。。用VC6.0新建一个wn32程序,而不DOS程序,输入如下代码即可:#include#include#include#includeint g_nYPos = 200; //文字的Y坐标 long WINAPI WndProc...

谁可以给我讲一下C语言里的外用函数外部函数在整个源程序中都有效,其定义的一般形式为: extern 类型说明符 函数名(形参表) 例如: extern int f(int a,int b)如在函数定义中没有说明extern或static则隐含为extern。...

C语言中关于返回值谁能具体讲一下你这个问题很笼统 我就大概说下返回值的东东吧 在C语言里面所谓返回值是说一个函数当他执行到return的时候他会停止执行下面的语句向引用他的地方传递一个值 下面举例子说明...

用汇编语言程序实现一下C效果mov ax, m mov dx, n cmp ax, dx je label1 jl label2 sub ax, dx jmp label1 label2: sub dx, ax label2: label1: 有点小错误,修改了 mov ax, m mov dx, n cmp ax, dx je l...

语言怎么实现C的指针操作//模板类作为友元时要先有声明 template class SmartPtr; template class U_Ptr //辅助类 { private: //该类成员访问权限全部为private,因为不想让用户直接使用该类 friend c...

你好请问一下C语言怎么实现保存功能#include <stdio.h> 基本的文件操作 打开文件 FILE * fdopen(int fildes, const char *mode); 读文件 size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream)...

c语言中怎么实现键盘映射呵呵,这种情况只能用全局钩子来做,用WH_KEYBOARD类型的键盘钩子就行。在Hook回调函数中修改虚拟键代码就行了~ 大概的实现过程在下面讲一下: 先写一个DLL,全局钩子必须放在DLL中...

c语言宏扩展与宏展开是什么意识简单来说:宏定义又称为宏代换、宏替换,简称“宏”。是C提供的三种预处理功能的其中一种。复杂的请看下面,讲的很全。下面的带参宏定义,多行宏定义,在Linux内核源码中很多。另外si...

c语言中怎么实现函数的调用定义一个函数,就可以调用了啊 比如定义一个函数,实现参数a+参数b,返回值 int fu_add(int a,int b) { return a+b; } 这是一个最简单的函数,函数名称为fu_add,函数有两个参数,int a...