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 ()

Ответ на: комментарий от NickNotNick

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

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

Угу.

dataman ★★★★
()

Пора, пора выбрасывать Си на помойку истории. В современных языках такая дичь не нужна в принципе.

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

Очень похоже на правду :( Лучше до этого не дожить.

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

В современных языках своей дичи хватает.

gns ★★★★★
()
Ответ на: комментарий от 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 ★★★★★
()
Ответ на: комментарий от dataman

Ну натрави cppcheck на исходники systemd :) Memory leaks огребешь ведрами. А все потому, что Лёня знает за атрибут autofree и активно его пользует. А cppcheck — нет :)

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

А без разницы, что у тебя. Я как-то почти год занимался аутсорсной работой по анализу логов swacе'a и cppcheck'a после их работы над полным деревом исходников для дистрибутива, идущего на сертификацию то-ли во ФСТЭК, то-ли в ФСБ... Такого насмотрелся...

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