«ошибка: ожидаемое выражение перед структурой» в аргументе макроса к `offsetof` внутри функции макроса с musl - PullRequest
2 голосов
/ 06 марта 2020

g cc выдает следующую ошибку с musl lib c

device_achat.c:192:29: error: expected expression before ‘struct’
  return container_of(_iocb, struct ffs_request, iocb);
                             ^~~~~~
device_achat.c:52:45: note: in definition of macro ‘container_of’
         (type *)( (char *)__mptr - offsetof(type,member) );})
                                             ^~~~

device_achat. c

...
...
#define container_of(ptr, type, member) ({                      \
        const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
        (type *)( (char *)__mptr - offsetof(type,member) );})
...
...
/* Use container_of() to get ffs_request from iocb */
static inline struct ffs_request *to_ffs_request(struct iocb *_iocb)
{
    return container_of(_iocb, struct ffs_request, iocb);
}
...
...

1 Ответ

2 голосов
/ 06 марта 2020

Не видя больше кода, я думаю, что программа не включила stddef.h для получения offsetof, а G CC (ошибочно; это действительно действительно должно быть серьезная ошибка), рассматривая ее как неявно объявленную функцию, а не как макрос. lib c слегка нарушает пространство имен, неявно включая stddef.h из некоторого другого заголовка.

Обратите внимание, что вы можете сделать неявную функцию вещь ошибочной с помощью -Werror=implicit-function-declaration, чтобы перехватывать подобные ошибки.

...