Как получить доступ к объекту с определением типа вне его модуля перевода - PullRequest
0 голосов
/ 24 апреля 2019

test.h

#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED

int func(void);
typedef int (*FPTR)(void);

#endif // TEST_H_INCLUDED

func.c

#include "test.h"

static int x = 22; // persistent with external linkage.

int func(void)
{
  extern int x; // Referencing declaration
  static int count = 0; // persistent within block
  printf("%d : %d\n",++count,++x);
return 1;
}

FPTR funcptr = func; // persistent with external linkage. ??

main.c

#include "test.h"

#include <stdio.h>

extern funcptr; // referencing declaration ??

int main(void)
{
func();
funcptr(); // Compile Time Error Here
return 0;
}

Это не с ошибкой called object ‘funcptr’ is not a function or function pointer.

Я нарушаю здесь какие-либо кардинальные правила?

1 Ответ

4 голосов
/ 24 апреля 2019

неправильный синтаксис; должно быть

 extern FPTR funcptr;

потому что extern объявление все еще должно упоминать тип.

И вам лучше назвать его с (*funcptr)(), который, по крайней мере, более читабелен.

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