2014-04-27 4 views
4

У меня есть функция со следующим прототипом:Указатель функции с переменным числом аргументов

void func(int an, ...); 

И я хотел бы сохранить адрес этой функции и вызвать его позже. Я действительно понятия не имею, как это сделать, я desesperatly попробовал:

void (*funcPtr)(int, ...); // Declaration 
funcPtr = func;  // Storage 
(*funcPtr)(3,2,5);  // Call 

Этот код компилируется нормально, но при исполнении он делает дерьмо, когда я вхожу мою функцию аргументы в моей va_list не те I послал.

Заранее спасибо

EDIT: Хорошо, я просто забыл первый аргумент. В моем коде выше линия вызова должна быть заменена на:

(*funcPtr)(3,3,2,5);  // Call 
+0

Выглядит отлично здесь: http://ideone.com/uqLLR5. –

+0

Очень странно, ваш код не работает для меня, как и мой старый: компилируется отлично, но аргументы не ожидаются. Я использую Visual Studio 2013 – Lovy

+0

Из любопытства, какие значения отображает код Оли? – AntonH

ответ

1

Функции - указатели естественно. Таким образом, вы можете просто позвонить:

funcPtr(3,3,2,5); 

Похоже, у вас все в порядке. Если функция не имеет переменных аргументов, это действительно хорошая идея, чтобы объявить указатель функции с правой «формой» аргументов для защиты от прохождения неверных аргументов.

+0

Спасибо за точность – Lovy

Смежные вопросы