У меня есть функция C с определенным числом аргументов (не функция varargs). Например:C - функция вызова с динамическим числом аргументов
void testfunction(int a, int b, int c);
Эта функция является черным ящиком, поэтому я не могу ее изменить.
В основной функции у меня есть массив, содержащий все аргументы, которые я хочу передать своей «тестовой функции». Например:
void main() {
int args[] = {1, 2, 3};
...
}
Если предположить, что я не знаю заранее, что количество аргументов, что мой «функции теста» будет принимать (так как эта функция может меняться, в зависимости от функции, которую я хочу проверить), как можно ли вызвать «testfunction» с аргументами в массиве, динамически определенными?
У меня есть некоторый опыт в Ruby, это было бы эквивалентно
def test(a, b, c)
...
end
array = [1,2,3]
test(*array)
Спасибо вам много!
Для этого не существует стандартного способа C. Вам придётся прибегать к машинным трюкам сборки или иметь длинный переключатель для каждого количества аргументов, которые вы хотите поддержать. – 5gon12eder
До тех пор, пока ваше соглашение о вызове - это очистка звонящего, вы можете вызвать функцию с большим количеством аргументов, чем она требуется/хочет. – EOF
Может быть, мне что-то не хватает (если так, извините), но почему ваша тестовая функция не может принять указатель на массив и несколько аргументов? 'void testfunction (void * arrayPtr, int numArgs)'? – Mawg