Я в настоящее время меняю функции сигнатур класса функций в приложении. Эти функции хранятся в таблице функций, поэтому я ожидал также изменить эту таблицу функций. Я только что понял, что в некоторых случаях мы уже используем новую подпись функции. Но поскольку все задано правильному типу функции, как оно помещено в таблицу функций, никаких предупреждений не возникает.Вызов функций C со слишком большим количеством аргументов
Когда функция вызывается, ей будут переданы дополнительные параметры, которые не являются частью объявления функции, но они находятся в конце списка параметров.
Я не могу определить, гарантировано ли это тем, как параметры функции передаются в C. Я предполагаю, что для выполнения переменных функций, таких как sprintf, это должно быть так, что предыдущие аргументы могут быть правильно решены, что находится на конце списка параметров?
Он, очевидно, отлично работает на нескольких платформах, но из любопытства я хотел бы знать, как и почему он работает.
Это будет зависеть от вашего соглашения о вызове. Для cdecl это может быть неважно, но для чего-то вроде stdcall вы столкнетесь с проблемами. –
Можете ли вы показать, что представляет собой объявление указателя функции в таблице и фактическое объявление вызываемой функции? – ouah