ΠΠ·Π»Π΅Π·Π΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° 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.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru
