В течение последних нескольких лет GCC допускал дублирование typedefs, если они совместимы друг с другом. Проблема, с которой я сталкиваюсь, связана с расширениями отладки DWARF: кажется, что GCC (v4.8) отмечает дубликаты typedef как неиспользуемые и не включает их в DWARF.GCC, дубликаты typedefs и DWARF
Пример:
typedef struct yyx yyx_handle;
typedef struct yyx yyx_handle;
yyx_handle *get_yyx(void *p)
{ return (yyx_handle *)p; }
Результаты:
$ gcc -o f1.o -c f1.c -g
$ readelf --debug-dump f1.o | grep yyx_handle | wc -l
0
Если добавить -fno-eliminate-unused-debug-types
ЬурейеЕ включен, но тогда все мои неиспользованные типы появляются, а также, взорвав размер файла объекта.
Очевидным решением является удаление дублирующего определения, но это не всегда практично. Любые другие предложения?
Ваш вопрос, очевидно, имеет опечатку - typedefs * идентичны *. Ваш вопрос, однако, звучит так, как будто имена 'typedef'd * были разными? 'yyx_handle' определенно не используется здесь? – tofro
'yyx_handle' используется в примере. Если я удалю одно вхождение typedef, тогда он работает хорошо. – Freezer