目录

零基础 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=%dt,b=%dn", a, b);
    swap1(a, b);
    printf("交换后a=%dt,b=%dnn", 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:%dn", 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:%dn", 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 定义函数(多行书写)

本文由博客 - 猿说编程 猿说编程 发布!

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/shuopython/p/15228668.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程

3677 0元 限免