一、什么是宏

1、用一个字符串表示有意义的常量或常量表达式(被称为宏)

二、如何来定义宏

1、宏的分类:

A、有参宏:

格式:#define  宏名  常量或常量表达式
比如:#define  PI  3.14  (以后在程序当中只要看到了PI就代表3.14)
#include<stdio.h>
#define PI 3.14
void main(){int r = 2;float s1,s2,s3;s1=2*PI*r;//圆的周长s2=2*PI*r*r;//圆的面积 s3=4*PI*r*r;//求的表面积printf("s1=%1.f,s2=%1.f,s3=%1.f",s1,s2,s3);
}

1、使用宏可以增加程序的灵活性
2、宏名为了区分变量一般用大写字母来表示,当然也可以用小写字母。
3、宏不是语句,所以在定义宏的时候不要加分号,如果加了分号则会连同分号一同替换。
4、宏可以嵌套定义

//宏的嵌套定义
#define M 3
#define N M+4

5、宏一般写在程序的开头。如果有头文件则将宏放在头文件的下面。
6、在字符串里面当中即使有宏名也不做替换。
7、宏的运行原理:“先替换,再代值” 看以下例子

例一、

#include<stdio.h>
#define M 2
#define N M+M
void main(){int k1,k2;k1=M*N;//2*2+2=6k2=N*M;//2+2*2=6printf("k1=%d,k2=%d",k1,k2);
}

宏是什么就是什么,直接替换,定义宏时没有括号那么在使用的时候也没有括号

例二:

#include<stdio.h>
#define M 2
#define N M-3
#define K N-M
void main(){int k1,k2;k1=K*M/K-M;//N-M*M/N-M-M=M-3*2/M-3-2-2=2-3*2/2-3-3-3=-10 k2=K/K;//N-M/N-M=M-3-M/M-3-M=2-3-2/2-3-2=2-3-1-3=2-3-1-3-2=-7printf("k1=%d,k2=%d",k1,k2);
}


B、无参宏:

格式:#define 宏名 (参数) 表达式
比如:#define FUN(x,y)  x*y

1、无参宏的参数不要加上类型
2、无参宏的参数是先替换再代值

案例一、

#include<stdio.h>
#define FUN(x,y) x*y
void main(){int a=3,b=4,k;k=FUN(a,b);printf("%d",k);
}


案例二、

#include<stdio.h>
#define FUN(x,y) x*y
void main(){int a=3,b=4,k;k=FUN(a+b,a-b);//a+b*a-b=3+4*3-4=11printf("k=%d",k);
}


变化上述案例

案例三、

#include<stdio.h>
#define F1(x,y) x*y
#define F2(x,y)  F1(x+y,x-y)*F1(x-y,x+y)
void main(){int a=3,b=2,k;k=F2(a-b,a+b);/*F1(a-b+a+b,a-b-a+b)*F1(a-b-a+b,a-b+a+b)=a-b+a+b*a-b-a+b*a-b-a+b*a-b+a+b=3-2+3+2*3-2-3+2*3-2-3+2*3-2+3+2=3-2+3+6-2-3+6-2-3+6-2+3+2 =15*/printf("k=%d",k);
}

C语言当中的宏定义,宏的相关概念和作用和用法相关推荐

  1. main在c语言中的作用,main函数在C语言中是怎么定义的?有什么作用?

    main函数在C语言中是怎么定义的?有什么作用? 更新时间:2019-10-24 13:55 最满意答案 额,main不是程序的最开始啦.拿用glibc的程序来说,C语言执行的过程应该是 _start ...

  2. C语言——关键字,define定义宏,指针,结构体

    常见关键字 auto break case char continue const default do double else enum extern float for goto if int l ...

  3. C语言宏定义的几个坑和特殊用法

    总结一下C语言中宏的一些特殊用法和几个容易踩的坑.由于本文主要参考GCC文档,某些细节(如宏参数中的空格是否处理之类)在别的编译器可能有细微差别,请参考相应文档. 宏基础 宏仅仅是在C预处理阶段的一种 ...

  4. c语言 宏定义 宏用法

    目录 #define  标识符  常量 1.#if系列用法 2.#ifdef用法 3.#ifndef用法 4.#error用法 #define  标识符  常量 C语言中,可以用 #define 定义 ...

  5. 宏定义对调试代码的作用

    以如下代码为例: //head.h #ifndef __HEAD_H__ #define __HEAD_H__#define NUM1 10 #define NUM2 20 #endif//sum.c ...

  6. java中宏定义,宏定义的使用

    C中的宏分为两类,对象宏(object-like macro)和函数宏(function-like macro). 预定义宏: 1.预定义宏的行为是由编译器指定的. 2.前后双下杠的一般都是预定义. ...

  7. C语言中宏定义宏编译的使用#if,#ifdef,#ifndef,#elif,#else,#endif,defined使用详解,可以实现和if else一样的效果

    #define            定义一个预处理宏 #undef            取消宏的定义 #if                   编译预处理中的条件命令,相当于C语法中的if语句 ...

  8. java define 宏_宏定义宏函数(日志输出)define

    最常见的就是 #indef __cplusplus 这表示支持C++语法 再如可以定义常量 #define MAX 100 这跟JAVA全局变量有什么区别呢? JAVA的变量是有类型的,这没有类型,这 ...

  9. 宏定义宏函数 if else语句报错:error: ‘else’ without a previous ‘if’(看似解决实际上没解决)

    代码 #include <stdio.h> #include <stdlib.h>#define ALOGE(...) { printf(__VA_ARGS__); print ...

最新文章

  1. Struts2 Cannot create a session after the response has been committed 一个不起眼的错误
  2. 顺F速运,你被爱加M坑了
  3. oracle 11g asm 磁盘组兼容属性
  4. DESIGN_OUTLINE' and 'CUTOUT' are the preferred subclasWARNING
  5. 感谢CSDN赠送的2021年新年礼物
  6. WEB前端 CSS(非布局)
  7. 牛客网--2019校招--瞌睡
  8. Apache ActiveMQ消息中间件的基本使用
  9. sqlserver2000内存突破4g_友商都上16G,华为手机为何一直用8G内存?网友:效仿iOS...
  10. icecandidate事件
  11. 个推如何管理亿级代码的质量?持续集成SonarQube 代码质量管理系统
  12. mysql check约束无效_mysql数据库 check约束无效
  13. Camtasia卡点相册视频教程
  14. Docker教程小白实操入门(13)--如何使用COPY和ADD复制文件到容器内
  15. 多线程之生产者与消费者问题
  16. TOUCH  PANEL
  17. 天正暖通2013版安装包附带注册机下载
  18. mysql 删除不了库
  19. 单张图片生成三维点云
  20. Joomla 一个实例建站过程

热门文章

  1. matlab大地主题正算代码,大地主题解算正算
  2. 用C++模板来展示new与delete操作符原理
  3. 进程和线程的分配策略【杂记】
  4. 大学英语计算机等级考试,全新版大学英语综合教程3课文原文及翻译6-8,全国计算机等级考试一级试题及答案(25套).doc...
  5. 计算机内部网络连接,局域网内电脑连不上网络怎么办
  6. c android app下载地址,C Tuner
  7. 数字电路实验(十九)——CPU综合设计(15)
  8. 无线信道建模技术在5G场景下的分析与应用
  9. oracle适合分布式架构吗,争议|集中式 vs 分布式,医院集成平台存储应选择谁?...
  10. Parallel的使用