LINUX.ORG.RU

IWYU 0.21

 , iwyu


1

3

Вышел релиз IWYU (или include-what-you-use), программы позволяющей находить избыточные и предлагать недостающие #include в вашем коде на C/C++.

«Включать то, что используешь» означает следующее: для каждого символа (типа, переменной, функции или макроса), используемого в foo.cc, либо foo.cc, либо foo.h должны подключать .h-файл, экспортирующий объявление этого символа. Инструмент include-what-you-use – это программа для анализа #include исходных файлов с целью поиска нарушений этого подхода и выдачи рекомендаций для исправления. Программа использует библиотеки Clang и обычно релиз означает совместимость с новой версией Clang.

Основная цель include-what-you-use - удаление лишних #include. Для этого необходимо выяснить, какие #include не нужны в данном файле (как для .cc, так и для .h), и по возможности заменить #include на предварительное объявление.

Основные изменения

  • Совместимость с Clang 17.
  • Улучшен анализ псевдонимов типов (typedef и using).
  • Улучшен анализ псевдонимов пространств имен (namespace xyz = foobar).
  • Улучшена поддержка развернутых предварительных деклараций (typedef struct Foo Bar;).
  • Улучшить обработку «автокаста» и возвращаемых типов функций, особенно при работе со сложными шаблонными типами.
  • Добавлена новая прагма IWYU: always_keep, позволяющая пометить заголовок, что он всегда должен сохраняться, где бы он ни был включен.
  • Автоматическое использование сопоставлений для builtins libc++, если libc++ является активной стандартной библиотекой.
  • Улучшение сопоставлений для заголовков libc++ и posix.

>>> Подробности



Проверено: hobbit ()

Ответ на: комментарий от LINUX-ORG-RU

Наверное есть табличка где список

Так и есть. Инсталлируются в /usr/share/include-what-you-use (/usr/local/share):

boost-1.64-all.imp
boost-1.64-all-private.imp
boost-1.75-all.imp
boost-1.75-all-private.imp
boost-all.imp
boost-all-private.imp
clang-6.intrinsics.imp
gcc-8.intrinsics.imp
gcc.libc.imp
gcc.stl.headers.imp
gcc.symbols.imp
iwyu.gcc.imp
libcxx.imp
python2.7.imp
python3.8.imp
qt4.imp
qt5_11.imp
qt5_4.imp
stl.c.headers.imp
stl.public.imp
dataman ★★★★★
()
Ответ на: комментарий от gns

Документировано: IWYUMappings.md

IWYU’s default mappings are hard-coded in iwyu_include_picker.cc, and are very GCC-centric. There are both symbol- and include mappings for GNU libstdc++ and libc.

Any mappings outside of the default set can therefore be specified as external mapping files.

dataman ★★★★★
()
Ответ на: комментарий от dataman

еще хуже :) Ну вот сегодняшняя моя диагностика. Пишу мелкую утилиту, не важно про что:

decrypt_pass.c:34:26: warning: implicit declaration of function ‘strcmp’ [-Wimplicit-function-declaration]
   34 |             if (av[2] && strcmp(av[2], "-n") == 0)
      |                          ^~~~~~
decrypt_pass.c:8:1: note: include ‘<string.h>’ or provide a declaration of ‘strcmp’
    7 | #include <openssl/rc4.h>
  +++ |+#include <string.h>
    8 | 

То есть, про где что определено, gcc знает и так.

gns ★★★★★
()
Ответ на: комментарий от gns

еще хуже :) Ну вот сегодняшняя моя диагностика. Пишу мелкую утилиту, не важно про что:

decrypt_pass.c:34:26: warning: implicit declaration of function ‘strcmp’ [-Wimplicit-function-declaration]
  34 |             if (av[2] && strcmp(av[2], "-n") == 0)
     |                          ^~~~~~
decrypt_pass.c:8:1: note: include ‘<string.h>’ or provide a declaration of ‘strcmp’
   7 | #include <openssl/rc4.h>
 +++ |+#include <string.h>
   8 | 

То есть, про где что определено, gcc знает и так.

Не знает. Это только со стандартными функциями работает.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

С нестандартными он начинает предполагать, что такого-то метода при инстанцировании темплейта не нашлось, выдает простыню на три экрана и вежливо добавляет, что есть что-то похожее, но там есть где-то const :)

Оно, конечно, иногда помогает, но читать это нет никаких сил :)

gns ★★★★★
()
Ответ на: комментарий от NickNotNick

Заглядывал, конечно.

Там нет всех символов.

Угу.

dataman ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.