Использование «extern» для объявления функций без параметров - PullRequest
0 голосов
/ 20 июня 2019

Я разрабатываю плагин на C, и указатели на общие функции могут быть определены только во время выполнения. Как следствие, мне нужно объявить функции, используя «extern», и все правильно за исключением , когда функция не принимает параметров!

Как правильно объявить и назначить указатель на внешнюю функцию в C?

Примечание. Я работаю на Mac с Xcode 10.2.1, и мой код C встроен в файл ".m" (Какао).

1 Ответ

2 голосов
/ 20 июня 2019

Проблема здесь, скорее всего, в том, что указатель на функцию int (*f)() НЕ является указателем на функцию, не имеющую аргументов. Это указатель на функцию с неопределенными аргументами. Вместо этого используйте int (*f)(void).

Вот пример:

$ cat main.c 
int foo() { return 0; }
int bar(int a) { return a; }

int main(void)
{
    int (*f)();
    f=foo;
    f=bar;
    int(*g)(void);
    g=foo;
    g=bar;
}

Теперь мы компилируем

$ gcc main.c 
main.c: In function ‘main’:
main.c:11:3: warning: assignment to ‘int (*)(void)’ from incompatible pointer type ‘int (*)(int)’ [-Wincompatible-pointer-types]
  g=bar;
   ^

Как видите, я не получаю предупреждение за указатель f. Только для g.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...