error: ‘be64toh’ undeclared (first use in this function)

Модератор: Модераторы разделов

IMB
Сообщения: 2545
ОС: Debian

error: ‘be64toh’ undeclared (first use in this function)

Сообщение IMB »

Доброго дня!

Код: Выделить всё

#define _DEFAULT_SOURCE

#include <stdio.h>
#include <arpa/inet.h>
#include <endian.h>

#define NTOH(TYPE) \
    _Generic((TYPE), \
        uint64_t: be64toh, \
        uint16_t: ntohs, \
        default: ntohl \
    )(TYPE)

int main(int argc, char **argv)
{
    printf("uint16_t %u, uint32_t %u, uint64_t %u\n",
            NTOH((uint16_t)0xFFFF),
            NTOH((uint32_t)0xFFFFFFFF),
            be64toh((uint64_t)0xFFFFFFFFFFFF));

    return 0;
}
При сборке ошибка error: ‘be64toh’ undeclared (first use in this function), но её нет если убрать be64toh из макроса, отсюда я делаю вывод что все необходимые иклюды и макросы присутствуют.
Подскажите причину?
Спасибо.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5160
ОС: Gentoo

Re: error: ‘be64toh’ undeclared (first use in this function)

Сообщение /dev/random »

be64toh - это не функция, а макрос, объявленный с параметрами. Самостоятельного идентификатора с таким именем нет. Если вам нужна именно функция, объявите её сами (с вызовом be64toh внутри).
Спасибо сказали: