C+中可变参数?

C+中可变参数?

如何编写接受可变数量参数的函数?这有可能吗?怎么可能?



江户川乱折腾
浏览 466回答 3
3回答

炎炎设计

你可能不应该这样做,你也可以用一种更安全、更简单的方式去做你想做的事情。从技术上讲,要在C中使用可变数量的参数,就需要包含stdarg.h。从那你会得到va_list类型以及在其上操作的三个函数称为va_start(),&nbsp;va_arg()和va_end().#include<stdarg.h>int&nbsp;maxof(int&nbsp;n_args,&nbsp;...){ &nbsp;&nbsp;&nbsp;&nbsp;va_list&nbsp;ap; &nbsp;&nbsp;&nbsp;&nbsp;va_start(ap,&nbsp;n_args); &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;max&nbsp;=&nbsp;va_arg(ap,&nbsp;int); &nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;2;&nbsp;i&nbsp;<=&nbsp;n_args;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a&nbsp;=&nbsp;va_arg(ap,&nbsp;int); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(a&nbsp;>&nbsp;max)&nbsp;max&nbsp;=&nbsp;a; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;va_end(ap); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;max;}如果你问我,这真是一团糟。它看起来很糟糕,不安全,而且充满了技术细节,这些细节与你想要实现的目标毫无关系。相反,考虑使用重载或继承/多态性、构建器模式(如operator<<()(在流中)或默认参数等。这些都比较安全:编译器可以更多地了解您想要做的事情,因此在您将您的腿踢掉之前,有更多的情况可以阻止您。
打开App,查看更多内容
随时随地看视频慕课网APP