一.define 简介

C 语言中,除了可以用 #define 定义一个标识符来表示一个常量,还可以用 #define 定义函数,例如:

//定义常量
#define A 100                   //定义整型变量A值为100
#define B "Hello"              //定义字符串变量B值为"Hello"(定义字符串需要加双引号)
#define C 3.1415926        //定义浮点数变量C值为3.1415926

//定义函数
#define MAX(a,b) (a>b)?a:b  //取两个数最大值
#define MIN(a,b) (a<b)?a:b  //取两个数最小值

       凡是以 # 开头的均为预处理指令,预处理又叫预编译。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。

二.define 定义函数

1.define 定义不带参数的函数

#include <stdio.h>#define A (x*2+5)int main(void)
{int x = 2;printf("A是:%d\n",A);return 0;
}/*
A是:9
*/

2.define 定义带参数的函数

#include <stdio.h>#define A(x) (x*2+5)int main(void)
{printf("A是:%d\n",A(2));return 0;
}/*
A是:9
*/
#include <stdio.h>#define MAX(a,b) (a>b)?a:b  //取两个数最大值
#define MIN(a,b) (a<b)?a:b  //取两个数最小值int main(void)
{printf("最大值是:%d\n",MAX(5,100));printf("最小值是:%d\n",MIN(5,100));return 0;
}/*
最大值是:100
最小值是:5
*/

三.define 定义函数陷阱

1.define 函数陷阱一

#include <stdio.h>#define A(x) x*xint main(void)
{printf("A是:%d\n",A(2));    //2*2=4printf("A是:%d\n",A(2+1)); //2+1*2+1=5return 0;
}/*
A是:4
A是:5
*/
#include <stdio.h>#define A(x) (x)*(x)int main(void)
{printf("A是:%d\n",A(2));    //(2)*(2)=4printf("A是:%d\n",A(2+1)); //(2+1)*(2+1)=9return 0;
}/*
A是:4
A是:9
*/

2.define 函数陷阱二

#include <stdio.h>#define A(x) (x)*(x)
int main(void)
{printf("A是:%d\n",A(2));      //(2)*(2)=4printf("A是:%d\n",9/A(2+1)); //9/(2+1)*(2+1)=9return 0;
}/*
A是:4
A是:9
*/
#include <stdio.h>#define A(x) ((x)*(x))
int main(void)
{printf("A是:%d\n",A(2));      //((2)*(2))=4printf("A是:%d\n",9/A(2+1)); //9/((2+1)*(2+1))=1return 0;
}/*
A是:4
A是:1
*/

总结:

#define  A(x)  x*x
A(2) 等价 2*2 = 4
9/A(2+1) 等价 9/2+1*2+1 = 7

#define  A(x)  (x)*(x)
A(2) 等价 (2)*(2) = 4
9/A(2+1) 等价 9/(2+1)*(2+1) = 9

#define  A(x)  ((x)*(x))
A(2) 等价 ((2)*(2)) = 4
9/A(2+1) 等价 9/((2+1)*(2+1)) = 1

参考原文:

https://blog.csdn.net/ZhaDeNianQu/article/details/120095018

C语言 #define 用法相关推荐

  1. C语言#define的用法,C语言宏定义

    #define 叫做宏定义命令,它也是C语言预处理命令的一种.所谓宏定义,就是用一个标识符来表示一个字符串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串. 我们先通过一个例子来看一下 ...

  2. c语言define变量字符串拼接,C语言#define的用法

    C语言#define的用法 例如:如果x是一个宏参量,那么#x可以把参数名转化为相应的字符串.该过程称为字符串化. #include #define PSQR(x) printf ("The ...

  3. C语言offsetof用法以及其扩展用法

    标题C语言offsetof用法以及其扩展用法 offsetof由于不是标准库的函数,所以得查一下,在stddef.h中,搜索一下编译器的这个头文件位置: 暴力一点,直接在根目录下搜索,find -na ...

  4. [define的用法]define用法集锦

    篇一 : define用法集锦 Definition: The #define Directive You can use the #define directive to give a meanin ...

  5. C语言 #define 与 typedef 的区别

    C语言 #define 与 typedef 的区别与用法 (qq.com) 在C语言编程中,typedef 和 #define是最常用语句,可能很多工作过几年的工程师都没有去深究过它们的一些用法和区别 ...

  6. c++中define用法

    c++中define用法 define在c++语言中用法比较多,这里对其进行整理. 1.无参宏定义 无参宏的宏名后不带参数. 其定义的一般形式为: #define  标识符  字符串 1 其中的&qu ...

  7. #define 用法

    #define用法 收藏 1.简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写 if(i<MAXTIME){ ...

  8. C:#define用法

    #define用法 C语言中,可以用 #define 定义一个标识符来表示一个常量. 其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了. 预编译又叫预处理.预编译不是编译 ...

  9. c++ 预处理命令 #define用法

    预处理命令 #define用法 #define命令 #define命令 #define命令用于把指定的字符串替换文件中的宏名称 . 也就是说, #define使编译器把文件中每一个macro-name ...

最新文章

  1. 在阿里,我们这样帮助用户实现业务云原生化迁云
  2. springcloud1.5.9+zipkin链路跟踪配置
  3. NYOJ 题目528 找球号(三)
  4. 025 使用@Profile完成环境条件注入
  5. 端到端测试的滥用–测试技术2
  6. 幂集 返回某集合的所有子集
  7. HTML+CSS+JS实现 ❤️svg图片透明层文本显示❤️
  8. Python学习(三十七)—— 模板语言之自定义filter和中间件
  9. java scjp 试题_SCJP(JAVA)试题一套!求答案...
  10. Vimac 0.3.14最新版 (一款让你用键盘代替鼠标软件)
  11. 广州市黄埔区水利工程管理划定带动水利人才上升
  12. ios7下弹出新浪微博界面,一出现就消失的问题
  13. 【MC-CNN论文翻译】Computing the Stereo Matching Cost with a Convolutional Neural Network
  14. 后浪云WWW.IDC.NET:裸金属服务器有什么优势?
  15. 关于十七届恩智浦杯安徽赛区基础组参赛分享
  16. 爱创课堂源生javascript 共150课时
  17. RK3229 android9.0 按刷机按键进入loader
  18. 1000瓶药中找出一瓶毒药,10只老鼠做试验
  19. 001软件测试基本介绍
  20. 毕业设计 基于51单片机的电子秤设计(源码+硬件+论文)

热门文章

  1. 线极化波的matlab仿真过程,圆极化波及其MATLAB仿真-西电讲课稿
  2. php获取后台数据并输出,html表单通过关联数组向php后台传多条数据并遍历输出...
  3. 山东专利申请需要准备的材料有哪些
  4. 我为什么在美国也不给孩子喝牛奶?
  5. GitHub上 README 增加图片标签
  6. 27、Acwing 2021/2/5 1101. 献给阿尔吉侬的花束
  7. prctl()函数给线程命名
  8. HTTPS双向认证破解抓包
  9. json to csv java_在Java中将JSON转换为XLS / CSV
  10. 3D Human Motion Estimation via Motion Compression and Refinement