Если вы действительно пытаетесь передать три аргумента в функцию, но знаете только два типа во время компиляции, вы можете сделать это, используя список переменных аргументов. Предположим, вы хотите, чтобы третьим аргументом был int
или double
, но вы должны сначала проверить temp1
или temp2
, чтобы узнать, каким он должен быть:
#include <stdarg.h>
int foo(int temp1, int temp2, ...) {
va_list ap;
int temp_int;
double temp_double;
va_start(ap, temp2);
/*
* Figure out what type you want the third argument to be
* and use va_arg(ap, int) or va_arg(ap, double) to pull
* it off the stack.
*/
va_end(ap);
/*
* Get on with what foo() is really all about (including
* return an int.
*/
}
Этот тип хака не защитит вас от того, что кто-то скажет foo(1, 2)
, foo(3, 4, "fish")
или подобные махинации, но это С и С, предполагающие, что вы выросли и отвечаете за свои собственные действия.