История изменений
Исправление
kirk_johnson,
(текущая версия)
:
Можно пример ?
Код:
#include <stdlib.h>
#include <sys/queue.h>
struct foo {
int a;
TAILQ_ENTRY(foo) entry;
};
TAILQ_HEAD(foo_queue, foo);
struct bar {
void *ptr;
TAILQ_ENTRY(bar) entry;
};
TAILQ_HEAD(bar_queue, bar);
int main(void)
{
struct bar b;
struct foo_queue fq;
TAILQ_INIT(&fq);
TAILQ_INSERT_TAIL(&fq, &b, entry);
exit(EXIT_SUCCESS);
}
Вывод:
$ clang -Wall test.c
test.c:23:2: warning: incompatible pointer types assigning to 'struct bar **' from 'struct foo **' [-Wincompatible-pointer-types]
TAILQ_INSERT_TAIL(&fq, &b, entry);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sys/queue.h:404:24: note: expanded from macro 'TAILQ_INSERT_TAIL'
(elm)->field.tqe_prev = (head)->tqh_last; \
^ ~~~~~~~~~~~~~~~~
test.c:23:2: warning: incompatible pointer types assigning to 'struct foo *' from 'struct bar *' [-Wincompatible-pointer-types]
TAILQ_INSERT_TAIL(&fq, &b, entry);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sys/queue.h:405:20: note: expanded from macro 'TAILQ_INSERT_TAIL'
*(head)->tqh_last = (elm); \
^ ~~~~~
test.c:23:2: warning: incompatible pointer types assigning to 'struct foo **' from 'struct bar **' [-Wincompatible-pointer-types]
TAILQ_INSERT_TAIL(&fq, &b, entry);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sys/queue.h:406:19: note: expanded from macro 'TAILQ_INSERT_TAIL'
(head)->tqh_last = &(elm)->field.tqe_next;
Отчего же ? Что мне мешает использовать оригинальный BSD вариант ?
Ничего. А вот внутренности gcc не являются публичным API. И завтра его оттуда могут выкинуть.
P.S. Лулз в том, что у gcc < 5.x похоже просто забивает на несовпадение типов.
Исправление
kirk_johnson,
:
Можно пример ?
Код:
#include <stdlib.h>
#include <sys/queue.h>
struct foo {
int a;
TAILQ_ENTRY(foo) entry;
};
TAILQ_HEAD(foo_queue, foo);
struct bar {
void *ptr;
TAILQ_ENTRY(bar) entry;
};
TAILQ_HEAD(bar_queue, bar);
int main(void)
{
struct bar b;
struct foo_queue fq;
TAILQ_INIT(&fq);
TAILQ_INSERT_TAIL(&fq, &b, entry);
exit(EXIT_SUCCESS);
}
Вывод:
$ clang -Wall test.c
test.c:23:2: warning: incompatible pointer types assigning to 'struct bar **' from 'struct foo **' [-Wincompatible-pointer-types]
TAILQ_INSERT_TAIL(&fq, &b, entry);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sys/queue.h:404:24: note: expanded from macro 'TAILQ_INSERT_TAIL'
(elm)->field.tqe_prev = (head)->tqh_last; \
^ ~~~~~~~~~~~~~~~~
test.c:23:2: warning: incompatible pointer types assigning to 'struct foo *' from 'struct bar *' [-Wincompatible-pointer-types]
TAILQ_INSERT_TAIL(&fq, &b, entry);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sys/queue.h:405:20: note: expanded from macro 'TAILQ_INSERT_TAIL'
*(head)->tqh_last = (elm); \
^ ~~~~~
test.c:23:2: warning: incompatible pointer types assigning to 'struct foo **' from 'struct bar **' [-Wincompatible-pointer-types]
TAILQ_INSERT_TAIL(&fq, &b, entry);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sys/queue.h:406:19: note: expanded from macro 'TAILQ_INSERT_TAIL'
(head)->tqh_last = &(elm)->field.tqe_next;
Отчего же ? Что мне мешает использовать оригинальный BSD вариант ?
Ничего. А вот внутренности gcc не являются публичным API. И завтра его оттуда могут выкинуть.
P.S. Лулз в том, что у gcc < 5.x похоже просто забивает на несовпадение типов.
Исходная версия
kirk_johnson,
:
Можно пример ?
Код:
#include <stdlib.h>
#include <sys/queue.h>
struct foo {
int a;
TAILQ_ENTRY(foo) entry;
};
TAILQ_HEAD(foo_queue, foo);
struct bar {
void *ptr;
TAILQ_ENTRY(bar) entry;
};
TAILQ_HEAD(bar_queue, bar);
int main(void)
{
struct bar b;
struct foo_queue fq;
TAILQ_INIT(&fq);
TAILQ_INSERT_TAIL(&fq, &b, entry);
exit(EXIT_SUCCESS);
}
Вывод:
$ clang -Wall test.c
test.c:23:2: warning: incompatible pointer types assigning to 'struct bar **' from 'struct foo **' [-Wincompatible-pointer-types]
TAILQ_INSERT_TAIL(&fq, &b, entry);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sys/queue.h:404:24: note: expanded from macro 'TAILQ_INSERT_TAIL'
(elm)->field.tqe_prev = (head)->tqh_last; \
^ ~~~~~~~~~~~~~~~~
test.c:23:2: warning: incompatible pointer types assigning to 'struct foo *' from 'struct bar *' [-Wincompatible-pointer-types]
TAILQ_INSERT_TAIL(&fq, &b, entry);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sys/queue.h:405:20: note: expanded from macro 'TAILQ_INSERT_TAIL'
*(head)->tqh_last = (elm); \
^ ~~~~~
test.c:23:2: warning: incompatible pointer types assigning to 'struct foo **' from 'struct bar **' [-Wincompatible-pointer-types]
TAILQ_INSERT_TAIL(&fq, &b, entry);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sys/queue.h:406:19: note: expanded from macro 'TAILQ_INSERT_TAIL'
(head)->tqh_last = &(elm)->field.tqe_next;
Отчего же ? Что мне мешает использовать оригинальный BSD вариант ?
Ничего. А вот внутренности gcc не являются публичным API. И завтра его оттуда могут выкинуть.