目录C语言中#define在多行宏定义出错的原因1.第一种错误2.第二种错误使用#define宏定义的几个小技巧1.调试开关2.条件编译3.宏实现函数4.跨行宏定义5.防止头文件被重
#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进行多行宏定义时,注释要放在"\"之前
#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 DEBUG(...)
#define DEBUG printf
另外,还可以使用几个预定义的宏进行辅助:
__FILE__ // 文件
__FUNCTION__ // 函数
__LINE__ // 行号
DEBUG("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
当程序为了适配更多不同的环境时,还可以使用条件宏来选择不同的代码模块:
#if 1
printf("Hello!\n");
#else
printf("Hi!\n");
#endif
交换两个数:
#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]))
#define SWAP(a,b) do { \
int t = 0;\
t = a; \
a = b; \
b = t; \
} while(0)
细心的你可能已经注意到以上宏末尾都没有带分号“;”
#ifndef __TEST_H
#define __TEST_H
// 头文件内容
#endif
#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);
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: C语言中#define在多行宏定义出错的原因及分析
本文链接: https://www.lsjlt.com/news/197480.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0