Как сделать так, чтобы компилятор C не понимал, что указатель функции принимает любое количество аргументов?

У меня есть указатель на функцию внутри struct , который динамически устанавливается во время выполнения на адрес другой функции в различных местах в в моем коде. Он определен в моем заголовочном файле следующим образом:

    void *(*run)();

Во время компиляции я получаю следующее предупреждение об этом:

    warning: function declaration isn't a prototype

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

Если я изменю его на это:

    void *(*run)(void);

Я получаю ошибки компиляции везде, где я его использую, поскольку различные функции, использующие указатель, имеют разное количество аргументов, и указание void внутри круглых скобок говорит компилятору, что он не принимает никаких аргументов.

Я не могу использовать va_list или что-нибудь в этом роде, поскольку это просто указатель на другую функцию, и я использую один указатель для всех них, потому что он сохраняет s код чистый и простой.

Я могу отключить предупреждение, добавив это к моим флагам компилятора:

    -Wno-strict-prototypes

Но я бы предпочел не отключать предупреждения компилятора с помощью флагов, если я могу этого избежать.

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

Код работает отлично. Я просто хочу, чтобы предупреждение исчезло.

5
задан Corey Henderson 23 July 2011 в 06:38
поделиться