ΠΡΡΠ΅Π» ΡΠ΅Π»ΠΈΠ· 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