加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

令牌贴在C中

发布时间:2020-12-16 05:01:21 所属栏目:百科 来源:网络整理
导读:看完约 VA_NARG 后 我尝试使用宏根据C中的参数数量实现函数重载. 现在的问题是: void hello1(char *s) { ... }void hello2(char *s,char *t) { ... }// PP_NARG(...) macro returns number of arguments :ref to link above // does not work#define hello(
看完约 VA_NARG

我尝试使用宏根据C中的参数数量实现函数重载.
现在的问题是:

void hello1(char *s) { ... }
void hello2(char *s,char *t) { ... }
// PP_NARG(...)           macro returns number of arguments :ref to link above
 // does not work
#define hello(...)         hello ## PP_NARG(__VA_ARGS__)  

int main(void)
{
   hello("hi");   // call hello1("hi");
   hello("foo","bar"); // call hello2("foo","bar");
   return 0;
}

我从C-faq上读过this.但仍然无法让它工作……

解决方法

这是因为宏的评估规则.您必须定义某种辅助宏,它将数字作为标记接收:
#define HELLO_1(N,...)         hello ## N
#define HELLO_0(N,...)         HELLO_1(N,__VARGS__)
#define HELLO(...)         HELLO_0(PP_NARG(__VA_ARGS__),__VARGS__)

或者.您还可以浏览一下P99文档的预发布.这将为您提供更加舒适的宏工具来直接执行此操作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读