Я определяю сигнатуру функции для выполнения удаленного вызова процедуры. Из-за undefined behavior
я не могу увеличить индексную переменную в выражении вызова, поэтому я в итоге посчитал от 0
до последнего индекса и передал каждый из них в качестве аргумента. Есть ли более элегантный способ сделать это, не считая? Я думал о петле или о чем-то. Это пригодится, когда число фиксированных аргументов изменится, например, на 16
аргументы вместо 8
.
typedef unsigned long long int functionType(int, int, int, int, int, int, int, int);
unsigned long long int call_address(uintptr_t real_address, const unsigned int *arguments) {
auto function = (functionType *) real_address;
// We count instead of incrementing an index variable because: operation on 'argumentIndex' may be undefined
return function(arguments[0], arguments[1],
arguments[2], arguments[3],
arguments[4], arguments[5],
arguments[6], arguments[7]);
}
Я знаю, что есть переменные аргументы , использующие va_start
, va_list
и va_end
, но я не уверен, что их можно использовать здесь.