gpt4 book ai didi

具有灵活参数的 C 宏

转载 作者:行者123 更新时间:2023-11-30 19:42:37 26 4
gpt4 key购买 nike

我需要做类似的事情:

#include <stdio.h>
#include <stdint.h>
#include <stdarg.h>

#define INCR(count,ARGS...) \
if(ARGS) \
count++; \

void main()
{
int count =1;
int flag =1;
INCR(count);
printf("count %d",count);
INCR(count,flag); /* flag determines if the count is to be incremented or not */
printf("count %d",count);
}

我收到以下错误:

    sh-4.3$ gcc -o main*.c                                                                                                                                                  main.c: In function 'main':                                                                                                                                              main.c:6:8: error: expected expression before ')' token                                                                                                                   if(ARGS) \                                                                                                                                                                      ^                                                                                                                                                                main.c:15:5: note: in expansion of macro 'INCR'                                                                                                                               INCR(count);                                                                                                                                                             ^                                                                                                                                                                   sh-4.3$

此处,仅当标志存在时计数器才会递增。我需要一个参数数量灵活的宏。请帮我解决这个问题

最佳答案

基于 https://stackoverflow.com/a/11763277/5085250 中的示例你可以这样做:

#define GET_MACRO(_1,_2,NAME,...) NAME
#define INCR(...) GET_MACRO(__VA_ARGS__, INCR2, INCR1)(__VA_ARGS__)

#define INCR1(count)\
count++;

#define INCR2(count,flag)\
if(flag)count++;

这里我假设如果没有给出标志,您想要增加。如果您不想在这种情况下增加,您需要修改 INCR1 部分...

关于具有灵活参数的 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31354354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com