功能说明
获取宏的第 N 个参数,多余的参数舍弃
实现
#define _GET_3RD_ARG(arg1, arg2, arg3, ...) arg3
#define _GET_4TH_ARG(arg1, arg2, arg3, arg4, ...) arg4
_GET_3RD_ARG(1, 2) 编译报错
_GET_3RD_ARG(2, 1, 30) 返回 30
_GET_3RD_ARG(1, 2, 50, 60, 70) 返回 50
示例
#include <stdio.h>
#define _GET_3RD_ARG(arg1, arg2, arg3, ...) arg3
int main()
{
int num1 = 10;
int num2 = 20;
int result = _GET_3RD_ARG(num1, num2, 30); // 获取第三个参数
printf("Result: %d\n", result); // 输出结果:30
result = _GET_3RD_ARG(num1, num2, 40, 50, 60); // 参数多余三个参数,只获取第三个参数
printf("Result: %d\n", result); // 输出结果:40
return 0;
}
结果打印
Result: 30
Result: 40
解析
这个宏比较简单
- arg1 arg2 arg3 占位符,表示最少要有 3 个参数
...这一特性,表示多余的参数被...吸收
文章介绍了如何使用C语言宏定义来获取函数式宏的第三个和第四个参数,即使参数超出这三个也会被忽略。示例展示了_GET_3RD_ARG和_GET_4TH_ARG宏的用法,以及在不同参数数量情况下如何正确提取指定位置的参数值。
1028

被折叠的 条评论
为什么被折叠?



