目录

  • 一.define 简介
  • 二.define 定义多行函数
    • 1.简单使用
    • 2.经典案例
  • 三.猜你喜欢

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

一.define 简介

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

//定义常量
#define MAX_VALUE 100       //定义整型变量MAX_VALUE值为100
#define USER_NAME "huge"    //定义字符串变量USER_NAME值为"huge"
#define PI 3.1415926        //定义浮点数变量PI值为3.1415926//定义简单函数
#define MAX(a,b) (a>b)?a:b  //取两个数最大值
#define MIN(a,b) (a<b)?a:b  //取两个数最小值//定义复杂多行的函数
#define   MACRO(arg1,   arg2)   do   {   \\
stmt1;   \
stmt2;   \\
}   while(0)
关键是要在每一个换行的时候加上一个 "\ "

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

使用define定义一个多行的复杂函数,关键是要在每一个换行的时候加上一个 \

二.define 定义多行函数

1.简单使用

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 define 定义函数(多行书写)
//@Time:2021/06/27 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/#include "stdafx.h"
#include <stdio.h>//单行书写
//#define swap(x,y)   do{x=x+y;y=x-y;x=x-y;}while(0)//多行书写
#define swap1(x,y)   \
do{\
x=x+y;\
y=x-y;\
x=x-y;\
}while(0)int main()
{int a = 2, b = 3;printf("交换前a=%d\t,b=%d\n", a, b);swap1(a, b);printf("交换后a=%d\t,b=%d\n\n", a, b);return(0);
}
/*
交换前a=2       ,b=3
交换后a=3       ,b=2
*/

2.经典案例

/*
需求:1.debug模式下:a.如果定义了宏DEBUG_TO_FILE,那么将日志输出到文件b.如果定义了宏DEBUG_TO_FILE,那么将日志输出到控制台2.release模式下不打印任何日志
*/
/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 define 定义函数(多行书写)
//@Time:2021/06/27 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/#include <stdio.h>
#include <string.h>
//开启下面的宏表示程序运行在调试版本, 否则为发行版本, 这里假设只有调试版本才输出调试信息
#define _DEBUG
#ifdef _DEBUG//开启下面的宏就把调试信息输出到文件,注释即输出到终端#define DEBUG_TO_FILE#ifdef DEBUG_TO_FILE//调试信息输出到以下文件#define DEBUG_FILE "/tmp/debugmsg"//调试信息的缓冲长度#define DEBUG_BUFFER_MAX 4096//将调试信息输出到文件中#define printDebugMsg(moduleName, format, ...) {\char buffer[DEBUG_BUFFER_MAX+1]={0};\snprintf( buffer, DEBUG_BUFFER_MAX \, "[%s] "format" File:%s, Line:%d\n", moduleName, ##__VA_ARGS__, __FILE__, __LINE__ );\FILE* fd = fopen(DEBUG_FILE, "a");\if ( fd != NULL ) {\fwrite( buffer, strlen(buffer), 1, fd );\fflush( fd );\fclose( fd );\}\}#else//将调试信息输出到终端#define printDebugMsg(moduleName, format, ...) \printf( "[%s] "format" File:%s, Line:%d\n", moduleName, ##__VA_ARGS__, __FILE__, __LINE__ );#endif //end for #ifdef DEBUG_TO_FILE
#else//发行版本,什么也不做#define printDebugMsg(moduleName, format, ...)
#endif  //end for #ifdef _DEBUG
int main(int argc, char** argv)
{printDebugMsg( "www.codersrc.com", "name = %s", "C语言教程" );return 0;
}

三.猜你喜欢

  1. C 语言 数组下标越界和内存溢出区别
  2. C 语言 指针声明和定义
  3. C 语言 指针 p++ / p–
  4. C 语言 p++/§++/_(p++)/_p++
  5. C 语言 使用指针遍历数组
  6. C 语言 指针和数组区别
  7. C 语言 指针数组和数组指针区别
  8. C 语言 空指针 NULL
  9. C 语言 void 指针
  10. C 语言 野指针
  11. C 语言 函数值传递和址传递
  12. C 语言 函数缺省参数
  13. C 语言 函数不定长参数
  14. C 语言 函数指针
  15. C 语言 指针函数
  16. C 语言 回调函数 callback
  17. C 语言 typedef
  18. C 语言 define 定义常量
  19. C 语言 define 防止头文件重复包含
  20. C 语言 define 定义函数
  21. C 语言 define 定义函数(多行书写)

未经允许不得转载:猿说编程 » C 语言 define 定义函数(多行书写)

C语言 define 定义函数(多行书写) - C语言零基础入门教程相关推荐

  1. C语言 typedef 和 define 区别 - C语言零基础入门教程

    目录 一.typedef 简介 1.typedef 简化复杂的类型声明 A.定义普通变量 B.定义函数指针 C.定义结构体 2.定义与平台无关的类型 二.define 简介 三.typedef 和 d ...

  2. C语言 define 定义函数 - C语言零基础入门教程

    目录 一.define 简介 二.define 定义函数 1.define 定义不带参数的函数 2.define 定义带参数的函数 三.define 定义函数陷阱 1.define 函数陷阱一 2.d ...

  3. C语言 const 修饰函数参数 - C语言零基础入门教程

    C语言 const 修饰函数参数 - C语言零基础入门教程 目录 一.const 简介 1.const 修饰变量 2.const 修饰指针 3.const 修饰在函数名前面 4.const 修饰在函数 ...

  4. C语言 typedef - C语言零基础入门教程

    目录 一.typedef 简介 二.typedef 实战 1.typedef 定义基本数据变量 2.typedef 定义结构体 A.常规定义结构体 B.typedef 定义结构体 C.结构体使用 ty ...

  5. C语言 define 定义常量 - C语言零基础入门教程

    目录 一.define 简介 二.define 实战 1.不使用 define 2.使用 define 3.使用 define 优点 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学 ...

  6. C语言 main 函数参数 main(int argc, char *argv[]) - C语言零基础入门教程

    目录 一.main 函数写法 二.main 函数参数简介 三.使用 main 函数参数 1.打印 main 函数参数 a.直接运行 exe 文件 b.打开 cmd 命令行窗口执行 exe 文件 c.打 ...

  7. C语言 const 和 define 区别 - C语言零基础入门教程

    目录 一.const 使用 1.const 修饰变量 2.const 修饰指针 3.const 修饰在函数名前面 4.const 修饰在函数名后面 5.const 修饰函数参数 二.define 使用 ...

  8. C/C++ _strupr_s 函数 – 字符串小写转大写 - C语言零基础入门教程

    目录 一._strupr_s 函数简介 二._strupr_s 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零基础 C/C+ ...

  9. C/C++ _strlwr_s 函数 – 字符串大写转小写- C语言零基础入门教程

    目录 一._strlwr_s 函数简介 二._strlwr_s 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零基础 C/C+ ...

最新文章

  1. 【Verilog HDL 训练】第 13 天(存储器、SRAM)
  2. python中使用tab键进行提示(python3有效)
  3. oracle linux 配置本地yum,oracle linux配置本地光盘yum源
  4. dwcs6怎么添加搜索框_一文教会你微信小程序搜索怎么用、怎么优化
  5. linux deliver分发管理,Erlang/Elixir: 使用 Edeliver 进行自动化的持续部署
  6. 信息学奥赛一本通(1262:【例9.6】挖地雷)
  7. 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值。...
  8. 杭电2122Ice_cream’s world III
  9. android.mk 冒号,android学习-ndk-build(androidstudio编译cocos2d-x库的cpp为so文件的解释)
  10. con排插与单片机相连_教你如何使用Labview和单片机通信(串口).pdf
  11. python多级字典,如何在python中提取多级字典键/值
  12. 超简洁好看的个人网站导航页源码
  13. 前端分页(详细步骤)
  14. 2023年计算机专业毕业设计选题有哪些?(附源码)
  15. PostgreSQL实战之体系结构
  16. 苹果有arkit,android,ARKit来袭:苹果ar支持哪些设备,苹果手机怎么使用ar?
  17. 分析了一个小说站,速度挺不错的,顺便学习下js
  18. 一个可以给文件添加备注信息的小工具
  19. 手把手教你免费流畅访问GitHub
  20. Dynamics NAV4.0升级到Dynamics 365 Business Central180遇到的一些问题(持续更新中....)

热门文章

  1. 将linux安装到U盘中,并在华为matepad x pro中启动
  2. 从 0 到 1 上手 Web Components 业务组件库开发
  3. Word之输出音符mf中强音符(三)
  4. Linux总线pice错误,PCIe总线错误严重性=已更正
  5. w ndows10专业版连接不上网,windows10无线网络连不上的原因与应对方法
  6. win7 网络和共享中心提示“依赖服务或组无法启动” 解决方法
  7. 计算机网络(零)各层网络设备
  8. 哈哈!没想到吧!Java也可以 实现微信和支付宝支付功能(附代码)
  9. 刷题,小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字
  10. ie浏览器如何创建ajax,唯独ie浏览器缓存ajax请求