我尝试使用宏根据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文档的预发布.这将为您提供更加舒适的宏工具来直接执行此 *** 作.
总结以上是内存溢出为你收集整理的令牌贴在C中全部内容,希望文章能够帮你解决令牌贴在C中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)