返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中#define在多行宏定义出错的原因是什么
  • 813
分享到

C语言中#define在多行宏定义出错的原因是什么

2023-07-05 06:07:52 813人浏览 薄情痞子
摘要

这篇文章主要介绍了C语言中#define在多行宏定义出错的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中#define在多行宏定义出错的原因是什么文章都会有所收获,下面我们一起来看看吧。C语言

这篇文章主要介绍了C语言中#define在多行宏定义出错的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中#define在多行宏定义出错的原因是什么文章都会有所收获,下面我们一起来看看吧。

    C语言中#define在多行宏定义出错的原因

    1.第一种错误

    #include<stdio.h>#define echange(a,b) {\ int t;\ t=a;\ a=b;\ b=t;\}main(){ int c, d; c = 2; d = 3; printf("%d %d\n", c, d); echange(c,d) printf("%d %d\n", c, d); return 0;}

    在用#define进行多行宏定义时,注释要放在"\"之前

    2.第二种错误

    #include<stdio.h>#define echange(a,b) {\ int t;\ t=a;\ a=b;\ b=t;\}\main(){ int c, d; c = 2; d = 3; printf("%d %d\n", c, d); echange(c,d) printf("%d %d\n", c, d); return 0;}

    在用#define进行多行宏定义时,在最后一行加上"\“,我们使用#define进行多行定义时,默认最后一个”\“的下一行也属于宏定义范围,去掉最后一行的”\"即可

    以下是代码的正确形式

    #include<stdio.h>#define echange(a,b) {\ int t;\ t=a;\ a=b;\ b=t;\}main(){ int c, d; c = 2; d = 3; printf("%d %d\n", c, d); echange(c,d) printf("%d %d\n", c, d); return 0;}

    使用#define宏定义的几个小技巧

    1.调试开关

    有时候编写程序时为方便查找错误,会在很多地方加上串口打印语句直观查看程序哪里出错。

    但是,串口的输出是需要时间的,在项目基本完成时,就需要将这些打印关闭,但是一行一行的注释掉费时费力,不现实。

    这时可以使用宏来当做一个"开关",直接操作这个宏就可以实现打印的开关,例如:

    //#define    DEBUG(...)#define        DEBUG    printf

    另外,还可以使用几个预定义的宏进行辅助:

    __FILE__            // 文件__FUNCTION__        // 函数__LINE__            // 行号DEBUG("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);

    2.条件编译

    当程序为了适配更多不同的环境时,还可以使用条件宏来选择不同的代码模块:

    #if 1    printf("Hello!\n");#else    printf("Hi!\n");#endif

    3.宏实现函数

    交换两个数:

    #define swap(a,b)     ((a)=(a)+(b);(b)=(a)-(b);(a)=(a)-(b))

    比较两个数并且返回最小的数:

    #define MIN(a,b)     ((a)<(b)?(a):(b))

    数组元素个数:

    #define LENGTH(array)    (sizeof(array) / sizeof(array[0]))

    4.跨行宏定义

    #define    SWAP(a,b)    do { \                        int t = 0;\                        t = a; \                        a = b; \                        b = t; \                    } while(0)

    细心的你可能已经注意到以上宏末尾都没有带分号“;”

    5.防止头文件被重复包含

    #ifndef __TEST_H #define __TEST_H     // 头文件内容 #endif

    6.带参宏与带参函数的区别

    • 宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已;

    • 宏进行定义时不会考虑参数的类型;

    • 参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小;

    • 参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作;

    • 参数宏在定义时要多加小心,多加括号;

    • 函数只在目标文件中存在一处,比较节省程序空间;

    • 函数的调用会牵扯到参数的传递,压栈/出栈操作,速度相对较慢;

    • 函数的参数存在传值和传地址(指针)的问题,参数宏不存在;

    7.注意事项

    • 宏定义不会对引号内的参数进行替换;

    • 若要替换,可以在参数前面加上&rsquo;#&rsquo;转换成“字符串”,如:

    #define dprint(expr) printf(#expr " = %d\n", expr)

    使用dprint(x/y)就被替换成:

    printf("x/y" " = %g\n", x/y);

    printf("x/y = %g\n", x/y);

    关于“C语言中#define在多行宏定义出错的原因是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C语言中#define在多行宏定义出错的原因是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网其他教程频道。

    --结束END--

    本文标题: C语言中#define在多行宏定义出错的原因是什么

    本文链接: https://lsjlt.com/news/349992.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • C语言中#define在多行宏定义出错的原因是什么
      这篇文章主要介绍了C语言中#define在多行宏定义出错的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中#define在多行宏定义出错的原因是什么文章都会有所收获,下面我们一起来看看吧。C语言...
      99+
      2023-07-05
    • C语言中#define在多行宏定义出错的原因及分析
      目录C语言中#define在多行宏定义出错的原因1.第一种错误2.第二种错误使用#define宏定义的几个小技巧1.调试开关2.条件编译3.宏实现函数4.跨行宏定义5.防止头文件被重...
      99+
      2023-02-24
      C语言#define 多行宏定义出错 C语言多行宏定义
    • C语言宏定义的用法是什么
      C语言宏定义是一种预处理指令,用于在程序编译之前进行文本替换。宏定义可以将一个标识符(通常是一个函数或常量)替换为指定的代码段或值。...
      99+
      2023-10-11
      c语言
    • C语言中#define定义的标识符和宏实例代码
      目录1.#define定义标识符语法举个栗子2.#define定义宏#define替换的规则#与## #的用法:宏的缺点 宏和函数的优缺点     &n...
      99+
      2024-04-02
    • c语言宏定义用法规则是什么
      C语言宏定义的用法规则如下:1. 宏定义的格式为:#define 宏名 替换文本。2. 宏名必须是一个有效的C标识符,并且不可以是C...
      99+
      2023-10-11
      c语言
    • C语言中的内联函数(inline)与宏定义(#define)详细解析
      先简明扼要,说下关键:1、内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回指令,这样在运行时速度更快。2、内联函数可以调试,而宏定义是不...
      99+
      2022-11-15
      内联函数 宏定义
    • C语言宏的定义与使用方法是什么
      本文小编为大家详细介绍“C语言宏的定义与使用方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言宏的定义与使用方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、C语言中的宏定义#define...
      99+
      2023-06-30
    • C语言中带返回值的宏定义方式是什么
      这篇文章主要介绍“C语言中带返回值的宏定义方式是什么”,在日常操作中,相信很多人在C语言中带返回值的宏定义方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中带返回值的宏定义方式是什么”的疑惑有所...
      99+
      2023-07-05
    • c++中EnterCriticalSection出错的原因是什么
      在C++中,EnterCriticalSection函数用于进入一个临界区,并锁定该临界区,防止其他线程进入临界区。如果EnterC...
      99+
      2023-08-08
      c++
    • c语言宏定义无替换文本的方法是什么
      在 C 语言中,宏定义的目的就是为了替换文本。然而,如果希望定义一个不替换文本的宏,可以使用宏定义的特殊形式,即 "宏定义的参数为空...
      99+
      2023-10-11
      c语言
    • C语言中const和define的区别是什么
      本文小编为大家详细介绍“C语言中const和define的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中const和define的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。def...
      99+
      2023-06-29
    • c语言中typedef和define的区别是什么
      这篇文章主要介绍“c语言中typedef和define的区别是什么”,在日常操作中,相信很多人在c语言中typedef和define的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c语言中typed...
      99+
      2023-06-25
    • C语言中的自定义类型是什么
      C语言中的自定义类型是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。结构大小我们先随便给出一个结构体,为了计算他的大小,我给出完整的打印方案:typedef st...
      99+
      2023-06-28
    • C++中函数重载定义与原因是什么
      小编给大家分享一下C++中函数重载定义与原因是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!引例如果要求你只能通过print函数,即能打印字符串,又能打印一个整型。虽然在C语言中我们可以通过 print_i 和prin...
      99+
      2023-06-29
    • c语言中常量定义的规则是什么
      本篇内容介绍了“c语言中常量定义的规则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!c语言常量定义规则常量的定义:常量是指在程序运行过...
      99+
      2023-06-08
    • c语言中函数的定义方法是什么
      在C语言中,函数的定义通常包含以下几个部分:1. 返回类型:函数可以有不同的返回类型,如int、float、void等,用来表示函数...
      99+
      2023-09-29
      c语言
    • C语言中自定义函数的流程是什么
      在C语言中,自定义函数的流程如下:1. 函数声明:在函数调用之前,需要先声明函数。函数声明包括函数的返回类型、函数名、参数的类型和个...
      99+
      2023-09-15
      C语言
    • c语言常量定义的方法是什么
      在C语言中,常量可以使用#define预处理器指令或使用const关键字来定义。 使用#define定义常量: #define ...
      99+
      2024-03-07
      c语言
    • c语言常量定义的规则是什么
      c语言中常量定义的规则如下: 整型常量:可以是十进制、八进制、十六进制或二进制形式的数字,例如10、075、0xA、0b101。 ...
      99+
      2024-04-02
    • c语言定义字符的方法是什么
      在 C 语言中,字符类型使用 char 关键字进行定义。要定义一个字符变量,可以按照以下格式: char myChar = '...
      99+
      2024-03-13
      c语言
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作