C语言函数调用及宏定义代码实例
函数
#include<stdio.h>int square(int x);
int square(int x){return x * x;
}/*** 求x的平方*/
int main(){int i = 1;while(i <= 100){// i=1,1<=100,square(1)=1*1=1,i++=2,2-1=1,即1的平方=1// i=2,i<=100,square(2)=2*2=4,i++=3,3-1=2,即2的平方=4printf("%d的平方是%d\n",i-1,square(i++));}
}
上面的代码很容易就能理解,下面尝试用宏定义的方式来实现功能。。。
宏定义
#include<stdio.h>#define SQUARE(x) ((x) * (x))int main(void){int i = 1;while(i <= 100){// SQUARE(i++)--->((i++)*(i++))// 先取i再++,再取i再++,之后对取出的i求平方// i=1,1<=100,i++,取i=1,后++=2,再取i=2,后++=3,i*i=1*2=2,i=3,3-1=2,即2²=2// i=3,3<=100,i++,取i=3,后++=4,再取i=4,后++=5,i*i=3*4=12,i=5,5-1=4,即4²=12// i=5,5<=100,i++,取i=5,后++=6,再取i=6,后++=7,i*i=5*6=30,i=7,7-1=6,即6²=30printf("%d的平方是:%d\n",i-1,SQUARE(i++));}return 0;
}
通过结果不难发现,宏定义求平方出错了。。。下面对代码进行拆分:
SQUARE(i++)通过拆分,变成:(i++) * (i++),
接着以下面步骤进行计算:
设i = 1,(1++) * (1++)
a.i++; // 取i = 1,后自增,i = 2
b.i++; // 取i = 2,后自增,i = 3,
c.1 * 2 = 2
d.i = 3,3 - 1 = 2,所以2[b中取出的2]的平方=2[c中求出的2]
备注:
在一定程度上,使用带参数的宏来代替函数实现一些简单的功能,程序的执行效率或许会高一些,因为宏定义是直接在预编译阶段替换到代码中,并不需要像函数一样,一次调用申请一次栈空间。
这并不意味着可以没有限制地使用宏定义,宏定义在使用时藏有许多的陷阱,如果一不小心就会写出带有bug的程序。
C语言函数调用及宏定义代码实例相关推荐
- C语言 带参数宏定义中 # 和 ## 知识点总结、代码分析
目录 一.宏定义中 "#"知识点 1.直接转换字符串,不展开. 2.转换出的结果一定是"字符串". 二.宏定义中 ## 知识点 1.应用场景 2."# ...
- C语言 常量和宏定义
C语言:常量和宏定义 什么是常量 常量的类型 定义符号常量(宏定义) 标识符是什么 字符串常量 代码 什么是常量 在程序运行时,值不能被改变的量,称之为常量. 常量的类型 整型常量:520,1314, ...
- 【C语言】高级宏定义
前言 宏定义分为不带参数的宏定义和带参数的宏定义,不带参数的宏定义就是普通的宏定义,带参数的宏定义则稍稍复杂.下面将结合一些例子讲解这些显得比较高级的宏定义. 文章目录 前言 一.高级宏定义 1.#d ...
- 【C语言进阶】 宏定义实现字符串引用
宏定义实现字符串引用 原理 最简单的引用策略 使用#进行转义 原理 用宏定义实现字符串引用: 这种做法在编译的时候直接给宏名所对应的字符串 分配了一个内存地址空间,可以进行字符串输出.地址打印.指针操 ...
- F429-挑战者:LED的宏定义代码
1.LED 控制引脚相关的宏 //引脚定义//R 红色灯 #define LED1_PIN GPIO_PIN_10 #define LED1_GPIO_PORT G ...
- C语言中关于宏定义的学习
1.C语言中宏定义的使用 2.GCC官方文档 3.C语言宏定义的几个坑和特殊用法 转载于:https://www.cnblogs.com/Brandon0807/p/11146344.html
- c语言宏定义可变参数,C语言可变参数宏定义方法
http://blog.csdn.net/skyflying2012/article/details/38436711 2014 在GNU C中,宏可以接受可变数目的参数,就象函数一样,例如: 1 2 ...
- C语言中#、##宏定义的用法
一.#的用法 #用于编译器编译过程进行预处理. 1.宏定义 #define ON 1#ifndef _PARA_ #define _PARA_ #enddef#ifdef _PARB_ #define ...
- C语言字符串、宏定义及主函数介绍
希望你每天醒来都是阳光的,不会因为别人的几句话.几个表情和几个举止,影响自己的心情,好好生活,总会遇见美好的事... ---- 网易云热评 一.字符串 1.字符串声明 #include <st ...
最新文章
- 记一种数据库水平扩展的技巧
- 图像纹理合成_EnhanceNet:通过自动纹理合成实现单图像超分辨率
- Yii2 behavior运用
- ios html5上架,iOS原生集成H5+详细流程
- Oracle Stream Replication技术
- Spring Cloud Alibaba —— Sentinel 入门
- mac 显示隐藏文件的命令行和快捷键
- 初用WEB IOU,IE LAB备战启航
- 2022-2027年中国苹果树种植行业市场全景评估及发展战略规划报告
- 绕过微软WGA正版验证(蓝色五角星)的几则技巧
- 二分插入排序法-Python版
- 一个绝对有用的网站!
- 两个向量相乘的数值表示和几何表示
- 正菱台体积在线计算机,正多棱台体积,表面积,棱长,斜高,底面积,质量在线计算器_三贝计算网_23bei.com...
- esxi安装ghost win7_【教程】硬盘下Ghost 系统安装教程
- JavaScript之模板字符串的使用
- 记录mysql模糊查询索引问题
- zzuli OJ 1055: 兔子繁殖问题
- 百度飞桨小白逆袭大神被“虐”过程大公开--青春有你2 数据分析
- python 股票数据爬取(两种方法)