宏定义最关键的是要注意它只是一个文本替换,不注意的话,很容易引起歧义,看下面一段代码:

#include<stdio.h>

#define  M( x )   ( x*x )

int  main()

{

int a, b= 3;

a = M( b+2 );

printf ("%d\n" , a );

return 0;

}

这里的 M 是想要得到 x 的平方,而在程序中调用的参数为 b+2 ,原本想将 a 赋值为 (b+2)*(b+2),也就是 25 ,但是由于宏定义是展开在预处理时期,也就是在编译之前,此时 b 并没有赋值,这时候的 b 只是一个符号。 因此在程序中被展开为: (b+2*b+2); 所以程序执行后的结果为 a 的值为11。

所以为了达到原来的目的,我们可以把宏定义 M 改为:

#define  M(x)  ( (x) * (x) )

就可以变为平方的形式了

c语言里,关于宏定义的使用相关推荐

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

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

  2. C语言 常量和宏定义

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

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

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

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

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

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

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

  6. C语言里的“宏”是指什么?

    简单来说:宏定义又称为宏代换.宏替换,简称"宏".是C提供的三种预处理功能的其中一种.复杂的请看下面,讲的很全.下面的带参宏定义,多行宏定义,在Linux内核源码中很多.另外siz ...

  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.直接转换字符串,不展开. 2.转换出的结果一定是"字符串". 二.宏定义中 ## 知识点 1.应用场景 2."# ...

  10. C语言函数调用及宏定义代码实例

    函数 #include<stdio.h>int square(int x); int square(int x){return x * x; }/*** 求x的平方*/ int main( ...

最新文章

  1. 1199: 房间安排
  2. swift支持多线程操作数据库类库-CoreDataManager
  3. Java中string拼接,StringBuilder,StringBuffer和+
  4. weblogic安全漫谈
  5. 【数据结构与算法】图
  6. Atitit。Cas机制 软件开发 编程语言 无锁机制 java c# php
  7. QT4.7和VS2008 顺利安装必读 (最新版)
  8. 数据库学习--DML(数据管理语言)
  9. XPS10.1仿真PPC440步骤及遇到的问题
  10. 超详细三维建模教程【小白专用】
  11. 富士通Fujitsu DPK210 打印机驱动
  12. Spring底层原理问题
  13. 【暑假阅读推荐书目】历史篇·中国史
  14. html 地区筛选插件,帝国CMS7.2实现地区三级联动并且前台可地区筛选的插件教程...
  15. RK3566触屏旋转方向
  16. 【matplotlib】画图基本函数 pyplot.barh 画水平柱状图
  17. C4D中英文对照—噪波基础设置
  18. AOE图,最早活动时间最晚活动时间,关键路径关键节点
  19. python 仪表盘数据显示_Python制作仪表盘图,比Excel快速百倍
  20. ​现代计算机的雏形-微型计算机MCS-4

热门文章

  1. Django2.2中Xadmin错误集
  2. python学习日记(OOP——静态方法和类方法)
  3. 区分Collection、Collector和collect Collectors类的静态工厂方法
  4. Three.js 学习笔记(1)--坐标体系和旋转
  5. 【krpano】多分类缩略图及多分类地图案例
  6. 跟我从零基础学习Unity3D开发--NGUI入门基础
  7. invocation, 作者 Medwyn Goodall,女巫医 [搜索 invocation Medwyn Goodall]
  8. 下载SAP标准教程的方法
  9. [CEOI2008]order
  10. flex弹性布局学习总结