gpt4 book ai didi

c - varargs 是否提供了一种穷人的多态性?

转载 作者:太空狗 更新时间:2023-10-29 17:17:03 24 4
gpt4 key购买 nike

毫无疑问,C 的所有其他学生都注意到了这一点;这对我来说是新的。

如果我声明:

int xlate( void *, ... );

然后以几种不同的方式定义 xlate( )(也许除了一个定义之外的所有定义都是 #ifdef-ed out):

int xlate ( char *arg1 ) { ... }

int xlate ( int arg1, char *arg2, int arg3 ) { ... }

int xlate ( char arg1, int *arg2 ) { ... }

并且省略任何对 va_list 的提及——从不提及——在每个xlate( ) 的定义;然后调用 xlate() 遵守它的一个几个定义,似乎 xlate( ) 的每个编译版本以我想要的方式工作,至少在 gcc 和 msvc 下是这样。

C99 是否保证这种轻松、要求不高、慷慨的编译器行为?

谢谢!

-- 皮特

最佳答案

不,这更像是穷人的重载。 C 中的多态性(对多种对象类型执行操作并让每个对象都做正确的事情的能力)通常用 structures containing function pointers 完成。 .

而且您不能盲目使用任意多的参数。要么你有一个固定的最小参数数量,它可以通知函数有多少可变参数,或者你在最后有一个哨兵参数来表明你已经完成了。

换句话说,像这样:

printf ("%d: %s\n", int1, charpointer2);
x = sum_positive_values (1, 2, 3, 4, 5, -1);

关于c - varargs 是否提供了一种穷人的多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4466990/

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