Как использовать typedef для внешней функции в C? - PullRequest
0 голосов

У меня есть два модуля, написанные на C11 в моем проекте: 'test1.c' и 'test2.c'.Модуль 'test1.c':

int FunctionWithVeryLONGLONGLONGLONGName(char* data)
{
    // do something
}

Модуль 'test2.c':

extern int FunctionWithVeryLONGLONGLONGLONGName(char* data);

int main(void)
{
    char data[ DATA_LEN + 1 ] = { "test_data" };
    FunctionWithVeryLONGLONGLONGLONGName(data);
    return 0;
}

Я хочу использовать короткое имя для функции 'FunctionWithVeryLONGLONGLONGLONGName' в модуле 'test2.c'без модификации модуля 'test1.c'.Например, что-то вроде этого:

FuncWithShortName(data);

Я пытаюсь сделать:

extern int FunctionWithVeryLONGLONGLONGLONGName(char* data);
typedef int FunctionWithVeryLONGLONGLONGLONGName(char* data);
FunctionWithVeryLONGLONGLONGLONGName FuncWithShortName;

int main(void)
{
    char data[ DATA_LEN + 1 ] = { "test_data" };
    FuncWithShortName(data);
    return 0;
}

Но компилятор выдал ошибку: «Определение функции FunctionWithVeryLONGLONGLONGLONGNamerequires скобки».Что я сделал не так?

1 Ответ

0 голосов
/ 09 июня 2018

typedef создает псевдоним типа, а не псевдоним функции или что-либо еще.

Вы можете получить своего рода псевдоним функции, определив локальный указатель на функцию для функции:

static int (*const FuncWithShortName)(char*) =
    FuncWithVeryLONGLONGLONGLONGName;
...