С вашей помощью я наконец скомпилировал код с указателями на функции. Но теперь я хотел бы сделать то же самое, но для функций из "внешней" библиотеки. typedef, arguments, флаги компиляции на 100% хороши, я получил это предупреждение ТОЛЬКО при попытке вызвать функцию из внешней библиотеки (когда я написал функцию с тем же прототипом и попытался вызвать ее с помощью этого кода, все было нормально) . Любые идеи?
#include <stdio.h>
#include <stdlib.h>
#include "libs/outlib.h"
typedef int (*VFUNCV)(int, double);
void call(int which, VFUNCV* fun, int a, double b)
{
fun[which](a, b);
}
int main()
{
VFUNCV fun[2] = {outlibfun1, outlibfun2};
call(0, fun, 3, 4.5);
return 0;
}
Предупреждение:
funargs.c: In function ‘main’:
funargs.c:14:5: warning: initialization from incompatible pointer type [enabled by default]
funargs.c:14:5: warning: (near initialization for ‘fun[0]’) [enabled by default]
funargs.c:14:5: warning: initialization from incompatible pointer type [enabled by default]
funargs.c:14:5: warning: (near initialization for ‘fun[1]’) [enabled by default]
И 14-я строка:
VFUNCV fun[2] = {outlibfun1, outlibfun2};
Декларация outlibfun
: int outlibfun1(int, double);
ДРУГОЙ НЕРАБОТАЮЩИЙ (ПРЕДУПРЕЖДЕНИЕ) ПРИМЕР:
#include <stdio.h>
#include <stdlib.h>
#include "libs/outlibz2.h"
typedef unsigned char* (*VFUNCV)(const unsigned char *, unsigned long, unsigned char *);
void call(int which, VFUNCV* fun, const unsigned char *a, unsigned long b, unsigned char * c)
{
fun[which](a, b, c);
}
int main()
{
VFUNCV fun[2] = {outlibfun1};
call(0, fun, "b", 3, "a");
return 0;
}
outlibfun1
иoutlibfun2
? - person Tony The Lion   schedule 07.08.2013