c语言宏定义函数如何调用
直接调用即可。如下示例:
#include<stdio.h> #define sum(b,c){int d=0;d=b+c;printf("两者的和:%d\n",d);} int main() {int x=0,y=0;scanf("%d%d",&x,&y);sum (x,y);return 0; }
测试通过:
#include<stdio.h>
#include<stdlib.h>
#define sum(b,c){int d=0;d=b+c;printf("两者的和:%d\n",d);}
int main()
{int x=0,y=0;scanf("%d%d",&x,&y);sum (x,y);system("pause");return 0;
}
测试代码2:通过
#include <stdio.h>
#include <stdlib.h>
#define transit(a, b, c, type) { type t=a;a=b;b=c;c=t;}
int main()
{int a=1;int b=2;int c=3;printf("a=%d, b=%d, c=%d\n", a, b, c);transit(a, b, c, int);printf("a=%d, b=%d, c=%d\n", a, b ,c);system("pause");return 1;
}
使用宏函数或者宏函数时,注意如下几点:
(1)宏函数的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以传参时要格外小心。
(2)宏函数定义要注意格式,尤其是括号。
如果上面的宏函数写成 #define MAX(a, b) (a>b?a:b),省去内层括号,则宏展开就成了k = (i&0x0f>j&0x0f?i&0x0f:j&0x0f),运算的优先级就错了。同样道理,这个宏定义的外层括号也是不能省的。若函数中是宏替换为 ++MAX(a,b),则宏展开就成了 ++(a)>(b)?(a):(b),运算优先级也是错了。
(3)宏函数往往会导致较低的代码执行效率。
int a[]={9,3,5,2,1,0,8,7,6,4};int max(n){return n==0?a[0]:MAX(a[n],max(n-1));}int main(){max(9);return 0;}
若是普通函数,则通过递归,可取的最大值,时间复杂度为O(n)。但若是宏函数,则宏展开为( a[n]>max(n-1)?a[n]:max(n-1) ),其中max(n-1)被调用了两遍,这样依此递归下去,时间复杂度会很高。
c语言宏定义函数如何调用相关推荐
- C语言宏定义函数的使用(定义单行和多行)
要写好C语言,漂亮的宏定义是非常重要的.宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等. 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定 ...
- C语言宏定义函数中的“_##”的意思
最近在看google vp9的代码的时候碰到: #define intra_pred_sized(type, size) \ void vp9_##type##_predictor_##size##x ...
- 宏定义函数和普通函数
宏定义函数: 预处理阶段进行简单的文本替换,没有入栈.出栈.参数传递和函数返回等等工作,执行效率明显高于普通函数,因此,简短并且被频繁调用的函数经常用宏定义函数来代替实现 没有参数检查,会影响程序安全 ...
- C语言宏定义、宏函数、内置宏与常用宏
前言: 在C语言中,变量类型.循环控制.基础语法等与其他高级语言基本无异:而C语言(C++)特有的两把双刃剑指针和宏定义/宏函数使得C语言在底层开发中披荆斩棘.无所不能.这两个概念涉及范围比较广,其分 ...
- 关于C语言刷题(#define宏定义函数的常见错误)
关于C语言刷题(#define宏定义函数的常见错误) 首先我们来先看对#define的定义 define,宏定义,C语言中预处理命令一种.分为无参宏定义和带参宏定义.无参宏定义的一般形式为:#defi ...
- 转载--c语言宏定义(1)
作者:独舞风 链接:c语言宏定义(1) 1.为什么要有宏定义? 代码中某个特定数值需要参与运算,而且该数值作用于多个地方,当需要对该数值进行修改时,希望只改动一个地方就能实现该数值的全部更新:即便某个 ...
- 宏定义 指针 c语言,C语言宏定义讲解(C和指针 笔记)
关于C语言宏定义#define 最常用的莫过于通过宏定义定义常数了,例如 #define MAX 1000 通过宏定义程序中需要的常量,方便维护被多次引用的变量,并且宏替换在预处理阶段完成, ...
- c/c++宏函数的定义与使用(宏定义函数)(macro definition)
文章目录 为什么要使用宏函数? 什么是宏 如何使用宏 宏的定义 不带参数的宏 带参数的宏(假参数,不是真正的参数,只是替换而已) 原理 对了,如果宏函数与函数名称相同,优先使用宏定义函数 为什么要使用 ...
- define宏定义函数及用模板函数实现同样的功能
最近在看别人的代码的过程中,发现了宏定义代码,由于自己这块之前没有用过,所以编写了示例程序,学习一下宏定义代码. 比如我们现在有一个需求,要实现两个数字交换,这两个数字可能是整型,浮点型或者其他类型, ...
最新文章
- 顺时针打印二维数组C语言递归,按顺时针打印矩阵
- bootstrap validator 出现Maximum call stack size exceeded
- MariaDB 源码调试
- yarn界面杀死application
- 语言列表导出xlxs_学习五分钟,掌握一种新语言。
- js 动态创建注释节点 createComment
- 五个 PostgreSQL 典型故障案例及处理
- 【优化布局】基于matlab遗传算法求解配电变电站布局优化问题【含Matlab源码 1317期】
- CMU 15-213 Introduction to Computer Systems学习笔记(16) Virtual Memory: Concepts
- 无法创建java虚拟机_创建java虚拟机失败的解决方法
- tcp 粘包是怎么产生的?
- 【HTML】讲讲对HTML5的语义化的理解
- Cadence 软件快捷操作
- 林群院士:从数学谈教育
- 一款内网横向渗透辅助工具
- 文件系统学习 RAID原理学习 RAID0 RAID1 RAID2 RAID3 RAID4 RAID5 RAID6 RAID10
- C语言所有头文件整理
- 微信小程序demo:QQ音乐;音乐搜索,音乐列表及播放停止
- windows 更新可能已经自动替换了您的AMD图形驱动程序
- matlab从fig图文件中提取数据
热门文章
- unity ui 概述_通过此概述了解Unity 2D和Platformer基础知识
- 7Z010 引脚功能详解
- 投稿别踩雷!| SCI论文重复率问题不容小觑
- 2019 ICPC 徐州网络赛 J.Random Access Iterator
- 【Python】十二星座图标
- New Bing AI搜索引擎初体验-基于ChatGpt4
- 计算机在职研究生是学历教育吗,2019年报考计算机技术在职研究生毕业之后为什么还是本科学历呢...
- 5种“水”喝掉脸上斑点
- 如何借助扬尘视频监测系统开展扬尘污染防控工作?
- Linux服务篇:CentOS 6.9搭建NTP服务器