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

发布时间:2023-02-24 17:38:18 作者:iii
来源:亿速云 阅读:128

这篇文章主要介绍了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.注意事项

#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在多行宏定义出错的原因是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. C语言 之编译器优化
  2. C语言 之建立动态链接库

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:基于Python如何实现绘制一个足球

下一篇:如何用Python绘制一个仿黑洞图像

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》