函数

#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语言函数调用及宏定义代码实例相关推荐

  1. C语言 带参数宏定义中 # 和 ## 知识点总结、代码分析

    目录 一.宏定义中 "#"知识点 1.直接转换字符串,不展开. 2.转换出的结果一定是"字符串". 二.宏定义中 ## 知识点 1.应用场景 2."# ...

  2. C语言 常量和宏定义

    C语言:常量和宏定义 什么是常量 常量的类型 定义符号常量(宏定义) 标识符是什么 字符串常量 代码 什么是常量 在程序运行时,值不能被改变的量,称之为常量. 常量的类型 整型常量:520,1314, ...

  3. 【C语言】高级宏定义

    前言 宏定义分为不带参数的宏定义和带参数的宏定义,不带参数的宏定义就是普通的宏定义,带参数的宏定义则稍稍复杂.下面将结合一些例子讲解这些显得比较高级的宏定义. 文章目录 前言 一.高级宏定义 1.#d ...

  4. 【C语言进阶】 宏定义实现字符串引用

    宏定义实现字符串引用 原理 最简单的引用策略 使用#进行转义 原理 用宏定义实现字符串引用: 这种做法在编译的时候直接给宏名所对应的字符串 分配了一个内存地址空间,可以进行字符串输出.地址打印.指针操 ...

  5. F429-挑战者:LED的宏定义代码

    1.LED 控制引脚相关的宏                   //引脚定义//R 红色灯 #define LED1_PIN GPIO_PIN_10 #define LED1_GPIO_PORT G ...

  6. C语言中关于宏定义的学习

    1.C语言中宏定义的使用 2.GCC官方文档 3.C语言宏定义的几个坑和特殊用法 转载于:https://www.cnblogs.com/Brandon0807/p/11146344.html

  7. c语言宏定义可变参数,C语言可变参数宏定义方法

    http://blog.csdn.net/skyflying2012/article/details/38436711 2014 在GNU C中,宏可以接受可变数目的参数,就象函数一样,例如: 1 2 ...

  8. C语言中#、##宏定义的用法

    一.#的用法 #用于编译器编译过程进行预处理. 1.宏定义 #define ON 1#ifndef _PARA_ #define _PARA_ #enddef#ifdef _PARB_ #define ...

  9. C语言字符串、宏定义及主函数介绍

    希望你每天醒来都是阳光的,不会因为别人的几句话.几个表情和几个举止,影响自己的心情,好好生活,总会遇见美好的事... ----  网易云热评 一.字符串 1.字符串声明 #include <st ...

最新文章

  1. 记一种数据库水平扩展的技巧
  2. 图像纹理合成_EnhanceNet:通过自动纹理合成实现单图像超分辨率
  3. Yii2 behavior运用
  4. ios html5上架,iOS原生集成H5+详细流程
  5. Oracle Stream Replication技术
  6. Spring Cloud Alibaba —— Sentinel 入门
  7. mac 显示隐藏文件的命令行和快捷键
  8. 初用WEB IOU,IE LAB备战启航
  9. 2022-2027年中国苹果树种植行业市场全景评估及发展战略规划报告
  10. 绕过微软WGA正版验证(蓝色五角星)的几则技巧
  11. 二分插入排序法-Python版
  12. 一个绝对有用的网站!
  13. 两个向量相乘的数值表示和几何表示
  14. 正菱台体积在线计算机,正多棱台体积,表面积,棱长,斜高,底面积,质量在线计算器_三贝计算网_23bei.com...
  15. esxi安装ghost win7_【教程】硬盘下Ghost 系统安装教程
  16. JavaScript之模板字符串的使用
  17. 记录mysql模糊查询索引问题
  18. zzuli OJ 1055: 兔子繁殖问题
  19. 百度飞桨小白逆袭大神被“虐”过程大公开--青春有你2 数据分析
  20. python 股票数据爬取(两种方法)

热门文章

  1. 充电桩、换电站、移动充电机器人,谁是补能最优解?
  2. flume-kafka环境搭建-mac单机模式
  3. 人月神话(2)人月神话
  4. 不安装标准件如何直接导出含有标准件的BOM
  5. 读书笔记-读者朋友们早点开始写博客吧
  6. 演讲实录丨祖昆仑 VR一体机是过渡产品形态么?
  7. Python 使用requests发送POST请求总结
  8. 产品运营职场助手——趁手的软件工具
  9. sphinx代码结构
  10. 系统分析师历年真题免费分享