Stdafx h Ρ‡Ρ‚ΠΎ это

Для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Β«stdafx.hΒ» Π² Visual Studio?

Π€Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ stdafx.h гСнСрируСтся автоматичСски, ΠΊΠΎΠ³Π΄Π° я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Visual Studio 2010. МнС Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ C ++, поэтому я Π½Π΅ ΠΌΠΎΠ³Ρƒ / Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

Для Ρ‡Π΅Π³ΠΎ stdafx.h ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ? Π­Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ я просто ΡƒΠ΄Π°Π»ΠΈΠ» этот Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»?

Π­Ρ‚ΠΎ Π½Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ для Windows, Π½ΠΎ это старая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ всС компиляторы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с большим API, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ Windows.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя, Ссли Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Cpp, Π° Ρ‚Π°ΠΊΠΆΠ΅ дСсятки Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ с нуля ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·.

Π₯ΠΈΡ‚Ρ€ΠΎΡΡ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² качСствС ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ всСх Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ компиляции, Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Β«ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированного Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся Ρ„Π°ΠΉΠ»ΠΎΠΌ с ΠΈΠΌΠ΅Π½Π΅ΠΌ stdafx.h просто ΠΏΠΎ историчСским ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ.

Π― Π½Π΅ Π²Π΅Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ этот Ρ‚Ρ€ΡŽΠΊ ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ для компиляторов Microsoft, ΠΈ ΠΏΡ€ΠΈ этом я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π’ Visual Studio 2010 этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ управляСтся ΠΈΠ· графичСского интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ посрСдством Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ CPP, Π²Ρ‹Π±ΠΎΡ€Π° «Бвойства» ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ «Бвойства ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ \ C / C ++ \ Precompiled HeadersΒ». Для Π΄Ρ€ΡƒΠ³ΠΈΡ… вСрсий Visual Studio располоТСниС Π² графичСском интСрфСйсС Π±ΡƒΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ссли Π²Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированныС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ (ΠΈΠ»ΠΈ запуститС свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡ… Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚), это Π½Π΅ сдСлаСт Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π΅Π·Π°ΠΊΠΎΠ½Π½ΠΎΠΉ; это просто ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ваш инструмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС с нуля ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·.

Если Π²Ρ‹ создаСтС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π±Π΅Π· зависимостСй Windows, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ #include ΠΈΠ· stdafx.h Ρ„Π°ΠΉΠ»Π°. НСт нСобходимости ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ, Π½ΠΎ, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° прСкомпиляции Π²Ρ‹ΡˆΠ΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² ΠΏΡ€ΠΎ stdafx.h

Stdafx h Ρ‡Ρ‚ΠΎ это. dlya novichkov pro stdafx h. Stdafx h Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. Stdafx h Ρ‡Ρ‚ΠΎ это-dlya novichkov pro stdafx h. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Stdafx h Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° dlya novichkov pro stdafx h
Π‘Ρ‚Π°Ρ‚ΡŒΡ рассчитана Π½Π° людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ знакомятся со срСдой Visual Studio ΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΉ свои Π‘ΠΈ++-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹. Π’ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΠΎΠΉ срСдС всё каТСтся странным ΠΈ нСпонятным. ОсобСнно Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ» stdafx.h, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ странныС ошибки Π²ΠΎ врСмя компиляции. ΠžΡ‡Π΅Π½ΡŒ часто всё заканчиваСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя Π²Π΅Π·Π΄Π΅ ΡΡ‚Π°Ρ€Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Precompiled Headers. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ людям Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ ΠΊ Ρ‡Π΅ΠΌΡƒ, ΠΈ Π±Ρ‹Π»Π° написана эта ΡΡ‚Π°Ρ‚ΡŒΡ.

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Precompiled Headers

Precompiled headers ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ускорСния сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ программисты Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Visual C++, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΡ€ΠΎΡˆΠ΅Ρ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹. На Π½ΠΈΡ… слоТно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ ΠΎΡ‚ precompiled headers. Π§Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ, Ρ‡Ρ‚ΠΎ Π±Π΅Π· Π½ΠΈΡ…, Π½Π° Π³Π»Π°Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° компилируСтся ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ врСмя. Π­Ρ‚ΠΎ добавляСт ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹. Π§Π΅Π»ΠΎΠ²Π΅ΠΊ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ для сСбя ΠΏΠΎΠ»ΡŒΠ·Ρ‹ ΠΎΡ‚ этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ для спСцифичных Π·Π°Π΄Π°Ρ‡ ΠΈ Π΅ΠΌΡƒ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ понадобится. И ΠΈΠ½ΠΎΠ³Π΄Π° считаСт Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π³ΠΎΠ΄Ρ‹.

На самом Π΄Π΅Π»Π΅, precompiled headers вСсьма полСзная тСхнология. ΠŸΠΎΠ»ΡŒΠ·Ρƒ ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Π΄Π°ΠΆΠ΅ Ссли Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ всСго нСсколько дСсятков Ρ„Π°ΠΉΠ»ΠΎΠ². ОсобСнно Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ становится Π·Π°ΠΌΠ΅Ρ‚Π΅Π½, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ тяТёлыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠ°ΠΊ boost.

Всё это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ прСпроцСссор Π² компиляторС вновь ΠΈ вновь выполняСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Ρ‹, Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π°, Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ #ifdef Π²Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ значСния макросов. ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ колоссальноС Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

МоТно сущСствСнно ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ объСм Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ прСпроцСссор ΠΏΡ€ΠΈ компиляции ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ИдСя Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π·Π°Ρ‚Π΅ΠΌ просто ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ тСкста.

На самом Π΄Π΅Π»Π΅, дСлаСтся Π΅Ρ‰Ρ‘ ряд шагов. МоТно Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ просто тСкст, Π° Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π― Π½Π΅ знаю, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ устроСно Π² Visual C++. Но, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ тСкст ΡƒΠΆΠ΅ Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ΠΉ Π½Π° лСксСмы. Π­Ρ‚ΠΎ Π΅Ρ‰Ρ‘ большС ускорит процСсс компиляции.

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Precompiled Headers

Π€Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит precompiled headers, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ «.pch». Имя Ρ„Π°ΠΉΠ»Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ совпадаСт с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ЕстСствСнно, это ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² настройках. Π€Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вСсьма большим ΠΈ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π½Ρ‘ΠΌ раскрыто. НапримСр, Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ PVS-Studio ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠΊΠΎΠ»ΠΎ 3 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚.

Π€Π°ΠΉΠ» *.pch Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ послС компиляции stdafx.cpp. Π€Π°ΠΉΠ» собираСтся с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ «/Yc». Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ компилятору, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ precompiled headers. Π€Π°ΠΉΠ» stdafx.cpp ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ строчку: #include Β«stdafx.hΒ».

Π’ Ρ„Π°ΠΉΠ»Π΅ Β«stdafx.hΒ» находится самоС интСрСсноС. Бюда Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π²ΠΎΡ‚ Ρ„Π°ΠΉΠ» stdafx.h, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π½Π°ΠΌΠΈ Π² PVS-Studio (Ρ„Π°ΠΉΠ» сокращён для ΡΡ‚Π°Ρ‚ΡŒΠΈ):

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ «#pragma warning» Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π½Π° стандартныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎ всС Ρ„Π°ΠΉΠ»Ρ‹ *.c/*.cpp слСдуСт Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Β«stdafx.hΒ». Π—Π°ΠΎΠ΄Π½ΠΎ стоит ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· этих Ρ„Π°ΠΉΠ»ΠΎΠ² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Β«stdafx.hΒ».

А Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ хотя ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²? НапримСр, Ρ‚Π°ΠΊΠΈΠ΅:

НуТно Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ precompiled headers? Π’Π°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Precompiled Headers

ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Wizard Π² Visual Studio создаёт Π΄Π²Π° Ρ„Π°ΠΉΠ»Π°: stdafx.h ΠΈ stdafx.cpp. ИмСнно с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½ΠΈΡ… ΠΈ рСализуСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ precompiled headers.

На самом Π΄Π΅Π»Π΅, эти Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Π’Π°ΠΆΠ½ΠΎ Π½Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компиляции Π² настройках ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π’ *.c/*.cpp Ρ„Π°ΠΉΠ»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ precompiled header. Однако, Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… precompiled headers. Пока Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρƒ нас Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½.

Π˜Ρ‚Π°ΠΊ, Ссли Π²Ρ‹ воспользовались wizard-ΠΎΠΌ, Ρ‚ΠΎ Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ stdafx.h ΠΈ stdafx.cpp. Плюс выставлСны всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ компиляции.

Если Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π΅ использовался ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ precompiled headers, Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим, ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий:

Π’ΠΎΡ‚ ΠΌΡ‹ ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ precompiled headers. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΌΡ‹ запустим ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ создан *.pch Ρ„Π°ΠΉΠ». Однако, Π·Π°Ρ‚Π΅ΠΌ компиляция остановится ΠΈΠ·-Π·Π° ошибок.

Для всСх *.c/*.cpp Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ precompiled headers. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ #include Β«stdafx.hΒ».

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Β«stdafx.hΒ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² *.c/*.cpp Ρ„Π°ΠΉΠ» самым ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ! Π˜Π½Π°Ρ‡Π΅ всё Ρ€Π°Π²Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ ошибки компиляции.

Если ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Π² этом Π΅ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΠ°. Когда Ρ„Π°ΠΉΠ» Β«stdafx.hΒ» находится Π² самом Π½Π°Ρ‡Π°Π»Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΠΆΠ΅ прСпроцСссированный тСкст. Π­Ρ‚ΠΎΡ‚ тСкст всСгда ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ² ΠΈ Π½ΠΈ ΠΎΡ‚ Ρ‡Π΅Π³ΠΎ Π½Π΅ зависит.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, Ссли Π±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎ Β«stdafx.hΒ» Π΅Ρ‰Ρ‘ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ„Π°ΠΉΠ». А Π² этом Ρ„Π°ΠΉΠ»Π΅ Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ ΠΈ напишСм: #define bool char. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ. ΠœΡ‹ мСняСм содСрТимоС всСх Ρ„Π°ΠΉΠ»ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… упоминаСтся Β«boolΒ». Π’Π΅ΠΏΠ΅Ρ€ΡŒ просто Ρ‚Π°ΠΊ нСльзя Π²Π·ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅ прСпроцСссированный тСкст. ЛомаСтся вСсь ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Β«precompiled headersΒ». Π”ΡƒΠΌΠ°ΡŽ, это ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Β«stdafx.hΒ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ располоТСн Π² Π½Π°Ρ‡Π°Π»Π΅. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Life hack

ΠŸΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ #include Β«stdafx.hΒ» Π²ΠΎ всС *.c/*.cpp Ρ„Π°ΠΉΠ»Ρ‹ достаточно ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π½Π΅ интСрСсно. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ получится рСвизия Π² систСмС контроля вСрсий, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Ρ„Π°ΠΉΠ»ΠΎΠ². ΠΠ΅Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ нСудобство Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ сторонниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Π²ΠΈΠ΄Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΊΠΎΠ΄ΠΎΠΌ. ΠŸΡ€Π°Π²ΠΈΡ‚ΡŒ эти Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅Ρ‚ смыла. По ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ для Π½ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ использованиС Β«precompiled headersΒ». Однако, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько ΠΌΠ΅Π»ΠΊΠΈΡ… сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, это Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ постоянно спотыкаСтся ΠΎΠ± precompiled headers.

Π•ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ precompiled headers Π»Π΅Π³ΠΊΠΎ ΠΈ просто. Бпособ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ Π½Π΅ Π²Π΅Π·Π΄Π΅ ΠΈ всСгда, Π½ΠΎ ΠΌΠ½Π΅ ΠΎΠ½ часто ΠΏΠΎΠΌΠΎΠ³Π°Π».

МоТно Π½Π΅ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π²ΠΎ всС Ρ„Π°ΠΉΠ»Ρ‹ #include Β«stdafx.hΒ», Π° Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Β«Forced Included FileΒ».

Π˜Π΄Ρ‘ΠΌ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ настроСк Β«AdvancedΒ». Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ всС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π’ ΠΏΠΎΠ»Π΅ Β«Forced Included FileΒ» пишСм:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Β«stdafx.hΒ» автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² Π½Π°Ρ‡Π°Π»ΠΎ Π’Π‘Π•Π₯ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². PROFIT!

Π‘ΠΎΠ»ΡŒΡˆΠ΅ Π½Π΅ потрСбуСтся ΠΏΠΈΡΠ°Ρ‚ΡŒ #include Β«stdafx.hΒ» Π² Π½Π°Ρ‡Π°Π»Π΅ всСх *.c/*.cpp Ρ„Π°ΠΉΠ»ΠΎΠ². ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сдСлаСт это сам.

Π§Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² stdafx.h

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π‘Π΅Π·Π΄ΡƒΠΌΠ½ΠΎΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Β«stdafx.hΒ» всСго подряд Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ ускорит ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, Π½ΠΎ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ Π΅Ρ‘.

ВсС Ρ„Π°ΠΉΠ»Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Β«stdafx.hΒ», зависят ΠΎΡ‚ Π΅Π³ΠΎ содСрТимого. ΠŸΡƒΡΡ‚ΡŒ Π² Β«stdafx.hΒ» Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ„Π°ΠΉΠ» Β«X.hΒ». Если Π²Ρ‹ помСняСтС Ρ…ΠΎΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² Β«X.hΒ», это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»Π΅Ρ‡ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ всСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ. Π’ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ Π² Β«stdafx.hΒ» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠžΠ§Π•ΠΠ¬ Ρ€Π΅Π΄ΠΊΠΎ. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌΠΈ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ систСмных ΠΈ сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

Если Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ Π² Β«stdafx.hΒ» собствСнныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΡΠΎΠ±Π»ΡŽΠ΄Π°ΠΉΡ‚Π΅ Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ Π±Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ- ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎ.

Если ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ *.h Ρ„Π°ΠΉΠ» мСняСтся Ρ€Π°Π· Π² мСсяц, это ΡƒΠΆΠ΅ слишком часто. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ€Π΅Π΄ΠΊΠΎ удаётся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всС ΠΏΡ€Π°Π²ΠΊΠΈ Π² h-Ρ„Π°ΠΉΠ»Π΅ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€Π°Π·Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ трСбуСтся 2-3 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, 2-3 Ρ€Π°Π·Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ β€” занятиС нСприятноС. Плюс полная пСрСкомпиляция потрСбуСтся всСм вашим ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ.

НСсколько Precompiled Headers

Π—Π°Ρ‡Π΅ΠΌ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколько precompiled headers? Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, это Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ часто. Но ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΠ°Ρ€Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ *.c ΠΈ *.cpp Ρ„Π°ΠΉΠ»Ρ‹. Для Π½ΠΈΡ… нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ *.pch Ρ„Π°ΠΉΠ». ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ.

НуТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²Π° *.pch Ρ„Π°ΠΉΠ»Π°. Один Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ C-Ρ„Π°ΠΉΠ»Π° (xx.c), Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ C++-Ρ„Π°ΠΉΠ»Π° (yy.cpp). БоотвСтствСнно, Π² настройках Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π‘-Ρ„Π°ΠΉΠ»Π°Ρ… использовался ΠΎΠ΄ΠΈΠ½ precompiled header, Π° Π² Π‘++-Ρ„Π°ΠΉΠ»Π°Ρ… β€” Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° для *.pch Ρ„Π°ΠΉΠ»ΠΎΠ². Π˜Π½Π°Ρ‡Π΅ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ‚ΠΈΡ€Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Другая ситуация. Одна Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ΄Π½Ρƒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π° другая Ρ‡Π°ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.

ЕстСствСнно, Π½Π΅ стоит всСм участкам ΠΊΠΎΠ΄Π° Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ ΠΎΠ±Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ (Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹Ρ…) Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π° ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ сущностСй.

Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π° precompiled headers ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Ρ€Π°Π·Π½Ρ‹Ρ… участках ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ *.pch Ρ„Π°ΠΉΠ»Ρ‹. Π”Π° ΠΈ имя *.pch Ρ„Π°ΠΉΠ»Π° Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Всё это, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, трСбуСтся Π΄Π΅Π»Π°Ρ‚ΡŒ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ, Π½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного Π² использовании Π΄Π²ΡƒΡ… precompiled headers Π½Π΅Ρ‚.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ использовании Precompiled Headers

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π²Ρ‹ΡˆΠ΅, Π²Ρ‹ смоТСтС ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ошибки, связанныС с stdafx.h. Но Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΅Ρ‰Ρ‘ Ρ€Π°Π· пройдёмся ΠΏΠΎ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΌ ошибкам компиляции ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΈΡ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΡŒΠ΅ β€” ΠΌΠ°Ρ‚ΡŒ ΡƒΡ‡Π΅Π½ΡŒΡ.

Fatal error C1083: Cannot open precompiled header file: ‘Debugproject.pch’: No such file or directory

Π’Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ precompiled header. Но ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ *.pch Ρ„Π°ΠΉΠ» отсутствуСт. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

Fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add ‘#include Β«stdafx.hΒ»’ to your source?

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ само Π·Π° сСбя, Ссли Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Π€Π°ΠΉΠ» компилируСтся с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ /Yu. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ precompiled header. Но Π² Ρ„Π°ΠΉΠ» Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Β«stdafx.hΒ».

НуТно Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ» #include Β«stdafx.hΒ».

Если это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚ΠΎ слСдуСт Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ precompiled header для этого *.c/*.cpp Ρ„Π°ΠΉΠ»Π°. Π£Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ /Yu.

Fatal error C1853: ‘project.pch’ precompiled header file is from a previous version of the compiler, or the precompiled header is C++ and you are using it from C (or vice versa)

Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ C (*.c), Ρ‚Π°ΠΊ ΠΈ C++ (*.cpp) Ρ„Π°ΠΉΠ»Ρ‹. Для Π½ΠΈΡ… нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ precompiled header (*.pch Ρ„Π°ΠΉΠ»).

Из-Π·Π° precompiled header компилятор Π³Π»ΡŽΡ‡ΠΈΡ‚

Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ сдСлано Π½Π΅ Ρ‚Π°ΠΊ. НапримСр, #include Β«stdafx.hΒ» располоТСн Π½Π΅ Π² самом Π½Π°Ρ‡Π°Π»Π΅.

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π½Π΅ скомпилируСтся. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ выдаст Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд странноС сообщСниС ΠΎΠ± ошибкС:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ считаСт, Ρ‡Ρ‚ΠΎ всС, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π΄ΠΎ строчки #include Β«stdafx.hΒ» (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ), являСтся precompiled header. ΠŸΡ€ΠΈ компиляции Ρ„Π°ΠΉΠ»Π° компилятор Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ всС, Ρ‡Ρ‚ΠΎ Π΄ΠΎ #include Β«stdafx.hΒ» Π½Π° тСкст ΠΈΠ· *.pch Ρ„Π°ΠΉΠ»Π°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ тСряСтся строчка Β«int A = 10Β».

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Ρ„Π°ΠΉΠ»Π° Β«my.hΒ» Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, нСльзя Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² этом Ρ„Π°ΠΉΠ»Π΅. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ сбиваСт программистов с Ρ‚ΠΎΠ»ΠΊΡƒ. Они Β«Π»Π΅Ρ‡Π°Ρ‚Β» Π΅Π³ΠΎ ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ precompiled headers ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π±Π°ΠΉΠΊΠΈ ΠΎ Π³Π»ΡŽΡ‡Π½ΠΎΡΡ‚ΠΈ Visual C++. Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, компилятор β€” это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ€Π΅Π΄ΠΊΠΎ Π³Π»ΡŽΡ‡Π°Ρ‰ΠΈΡ… инструмСнтов. Π’ 99.99% случаСв Π½Π°Π΄ΠΎ Π½Π΅ Π·Π»ΠΈΡ‚ΡŒΡΡ Π½Π° компилятор, Π° ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Ρƒ сСбя (Proof).

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊΠΈΡ… ситуаций Π½Π΅ Π±Ρ‹Π»ΠΎ, ВБЕГДА ΠΏΠΈΡˆΠΈΡ‚Π΅ #include Β«stdafx.hΒ» Π² самом Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π°. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ #include Β«stdafx.hΒ» ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ. Они всё Ρ€Π°Π²Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π² компиляции.

Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Forced Included File. Π‘ΠΌ. Π²Ρ‹ΡˆΠ΅ Ρ€Π°Π·Π΄Π΅Π» Β«Life hackΒ».

Из-Π·Π° precompiled headers ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ постоянно пСрСкомпилируСтся Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ

Π’ stdafx.h Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСгулярно рСдактируСтся. Или случайно Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π°Π²Ρ‚ΠΎΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ».

Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ содСрТимоС Ρ„Π°ΠΉΠ»Π° Β«stdafx.hΒ». Π’ Π½Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ. Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, Π½ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ½ΠΈ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ *.h Ρ„Π°ΠΉΠ»Ρ‹.

Вворится Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ нСпонятноС

Иногда ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ситуация, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΠΊΠΎΠ΄, Π° ошибка Π½Π΅ исчСзаСт. ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ нСпонятныС Π²Π΅Ρ‰ΠΈ.

ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ *.pch Ρ„Π°ΠΉΠ». Как-Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ компилятор Π½Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ измСнСния Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π½Π΅ пСрСстраиваСт *.pch Ρ„Π°ΠΉΠ». Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, подставляСтся старый ΠΊΠΎΠ΄. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это происходило ΠΈΠ·-Π·Π° ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ сбоСв, связанных с Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ².

Π­Ρ‚ΠΎ ΠžΠ§Π•ΠΠ¬ рСдкая ситуация. Но ΠΎΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΈ ΠΏΡ€ΠΎ Π½Π΅Ρ‘ Π½Π°Π΄ΠΎ Π·Π½Π°Ρ‚ΡŒ. Π― Π·Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π³ΠΎΠ΄Ρ‹ программирования сталкивался с Π½Π΅ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 2-3 Ρ€Π°Π·Π°. ΠŸΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ полная пСрСкомпиляция ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ precompiled headers Π½Π΅ удаётся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PVS-Studio ΠΈΠ»ΠΈ CppCat

Π­Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ частая ситуация, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊ Π½Π°ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ: «Π£ΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΠ΅ нСисправностСй ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ PVS-Studio». Π—Π΄Π΅ΡΡŒ ΠΎΠΏΠΈΡˆΡƒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ ΠΊΡ€Π°Ρ‚ΠΊΠΎ.

Если Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (solution) компилируСтся, это вовсС Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ устроСно. Часто ΠΎΠ΄Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (solution) содСрТит мноТСство ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ свои precompiled headers (имССтся свой stdafx.h ΠΈ stdafx.cpp).

Π’ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΠ³Π΄Π° Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· сосСднСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Ρ‚Π°ΠΊ часто дСлаСтся. Π’ΠΎΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π² *.cpp Ρ„Π°ΠΉΠ»Π΅ написано: #include Β«stdafx.hΒ».

И, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· stdafx.h подхватится, это интСрСсный вопрос. Но Ρ€Π°Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° компилируСтся β€” программисту Π²Π΅Π·Ρ‘Ρ‚.

К соТалСнию, Π½Π°ΠΌ слоТно ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ использовании *.pch Ρ„Π°ΠΉΠ»Π°. «ЧСстный» прСпроцСссор Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.

Π’ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ solution, Π½Π° самом Π΄Π΅Π»Π΅, устроСн Π½Π΅ Π²Π΅Ρ€Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠ² precompiled headers. Π‘Ρ€Π°Π·Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π»Π΅Π·Ρ‚ΠΈ масса интСрСсных ошибок, ΠΈ программист Π±ΡƒΠ΄Π΅Ρ‚ искрСннС ΡƒΠ΄ΠΈΠ²Π»ΡΡ‚ΡŒΡΡ, ΠΊΠ°ΠΊΠΈΠΌ ΠΆΠ΅ Ρ‡ΡƒΠ΄ΠΎΠΌ компилировался Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Π—Π° подробностями вновь дСлаю отсылку ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Плюс, Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ всё Ρ€Π°Π²Π½ΠΎ Π½Π΅ ясно, ΠΌΡ‹ подскаТСм Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Как Π²Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного Π² precompiled headers Π½Π΅Ρ‚. ВсС «многочислСнныС глюки компилятора», с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ сталкиваСтся программист ΠΏΡ€ΠΈ ΠΈΡ… использовании, Π½Π° самом Π΄Π΅Π»Π΅, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹. НадСюсь, эта ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅.

Precompiled headers ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ сущСствСнно ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ компиляции ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

include stdafx h Ρ‡Ρ‚ΠΎ это

Primary tabs

Stdafx h Ρ‡Ρ‚ΠΎ это. picture 19 1455465074. Stdafx h Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. Stdafx h Ρ‡Ρ‚ΠΎ это-picture 19 1455465074. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Stdafx h Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° picture 19 1455465074

Forums:

ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (C++, Π΄Π°Π»Π΅Π΅ любой ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΈΠΏΠ° Console App, MFC App, ΠΈΠ»ΠΈ ATL Service) Visual Studio Π³Π΅Π½Π΅Ρ€ΠΈΡ‚ ΠΊΡƒΡ‡ΠΊΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ костяк прилоТСния.
ΠšΡΡ‚Π°Ρ‚ΠΈ β€” ΠΏΡ€ΠΈ создании прилоТСния Ρ‚ΠΈΠΏΠ° Conlsole Application Π² Visual Studio 2010 stdafx.h содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки =

Π‘Ρ€Π΅Π΄ΠΈ этих Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слуТат для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² (precompiled headers). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ β€” stdafx.h, Π² Π½Π΅ΠΌ хранятся всС «основныС» include-Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ входящиС Π² сам ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‚.Π΅. Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚ΠΈΠΏΠ°=

Π’ свойствах ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° для всСх Ρ„Π°ΠΉΠ»ΠΎΠ² ΡΡ‚Π°Π²ΠΈΡ‚ΡŒΡΡ опция Β«use this precompiled headerΒ» ΠΈ указываСтся stdafx.h
Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ β€” stfafx.cpp, для Π½Π΅Π³ΠΎ указываСтся Β«create precompiled header fileΒ» ΠΈ, ΠΎΠΏΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈ, указываСтся stdafx.h

Q: Для Ρ‡Π΅Π³ΠΎ это сдСлано.

Q: ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка Β«error looking precompiled header directiveΒ».

A: Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ source-Ρ„Π°ΠΉΠ»Π΅, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ стоит опция Β«use this precompiled headerΒ» #include Β«stdafx.hΒ» Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ΄Ρ‚ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ include

Q: Как избавится ΠΎΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ PCH-Ρ„Π°ΠΉΠ»ΠΎΠ²

A: Π’ свойствах ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° для Ρ„Π°ΠΉΠ»ΠΎΠ² Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Β«Not Using Precompiled HeadersΒ» ΠΈΠ»ΠΈ Β«Automatically GenerateΒ»

Q: Π“Π΄Π΅ находятся эти ΠΎΠΏΡ†ΠΈΠΈ

Q: Π― настроил ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ DEBUG-вСрсии Π½Π° ΠΎΡ‚ΠΊΠ°Π· использования PCH, Π½ΠΎ ΠΏΡ€ΠΈ компиляции RELEASE ошибка ΠΎΠΏΡΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π°.

A: Project setting для DEBUG/RELEASE ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ Ρ€Π°Π·Π½Ρ‹Π΅ сущности. Π‘ΠΌ. ΠΏΡ€Π΅Π΄. ΠΏΡƒΠ½ΠΊΡ‚ Q/A ΠΈ настрой всС для RELEASE-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ записи Π² Microsoft Visual Studio ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚:

Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ (Π±ΠΎΠ»Π΅Π΅ простой) Π½Π΅Ρ‚:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ

1>c:usersadmindocumentsvisual studio 2013projectsconsoleapplication1consoleapplication1consoleapplication1.cpp(4)β€Œβ€‹: warning C4627: β€˜#include β€˜: skipped when looking for precompiled header use

Π’ Ρ‡Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΈ с Ρ‡Π΅ΠΌ это связано?

Stdafx h Ρ‡Ρ‚ΠΎ это. SFdNf. Stdafx h Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. Stdafx h Ρ‡Ρ‚ΠΎ это-SFdNf. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Stdafx h Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° SFdNf

2 ΠΎΡ‚Π²Π΅Ρ‚Π° 2

Π›Π°Π·Π΅Ρ€. h β€” это Ρƒ вас Π½Π°Π΄ΠΎ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π·Π° Ρ„Π°ΠΉΠ». Какой-Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ», смотритС Ρƒ сСбя Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ находится.

#define MAX_LOADSTRING 100 β€” это никакая Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Π° макрос. ΠžΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² любом мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ строчка Β«MAX_LOADSTRINGΒ», эта ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Π½Π° 100.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π€Π°ΠΉΠ»Ρ‹ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированных Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ²

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компилятора для ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² β€” /Y. На страницах свойств ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ находятся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Бвойства ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ > ΠŸΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ C/C++. МоТно Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя Ρ„Π°ΠΉΠ»Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ.

НастраиваСмый ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированный ΠΊΠΎΠ΄

Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбуСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ настраиваСмыС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированныС Ρ„Π°ΠΉΠ»Ρ‹. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ Microsoft C ΠΈ C++ содСрТат ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции любого ΠΊΠΎΠ΄Π° C ΠΈΠ»ΠΈ C++, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ встроСнный ΠΊΠΎΠ΄. Данная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ позволяСт ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ‚Π΅Π»ΠΎ ΠΊΠΎΠ΄Π°, ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ скомпилированноС состояниС ΠΊΠΎΠ΄Π° Π² Ρ„Π°ΠΉΠ»Π΅, Π° ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… компиляциях ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированный ΠΊΠΎΠ΄ с ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Ρ‰Π΅ находится Π² стадии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. КаТдая ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ компиляция выполняСтся быстрСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.

Π‘Π»ΡƒΡ‡Π°ΠΈ использования ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции исходного ΠΊΠΎΠ΄Π°

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированный ΠΊΠΎΠ΄ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π²ΠΎ врСмя Ρ†ΠΈΠΊΠ»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя компиляции, особСнно Ссли:

ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ большой тСкст ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π΄ΠΊΠΎ вносятся измСнСния.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ стандартный Π½Π°Π±ΠΎΡ€ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компиляции. Π’ этом случаС всС Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ.

ΠŸΠ΅Ρ€Π²Π°Ρ компиляция, которая создаСт Ρ„Π°ΠΉΠ» ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° (PCH), Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ компиляции. ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ компиляции ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ быстрСС, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированный ΠΊΠΎΠ΄.

МоТно ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C ΠΈ C++. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° языкС C++ распространСнной ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ являСтся ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ свСдСний ΠΎΠ± интСрфСйсС класса Π² Ρ„Π°ΠΉΠ»Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ². ВпослСдствии эти Ρ„Π°ΠΉΠ»Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ класс. ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ компиляция этих Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² позволяСт ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ.

Π₯отя для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ исходного Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° (PCH), Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² PCH.

Π”Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции ΠΊΠΎΠ΄Π°

МоТно ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΊΠΎΠ΄ C ΠΈΠ»ΠΈ C++ β€” Π²Ρ‹ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ компиляциСй Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ².

Для ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции трСбуСтся ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции исходного ΠΊΠΎΠ΄Π°, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΎΡ‚ простых Ρ„Π°ΠΉΠ»ΠΎΠ² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², обСспСчиваСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ быстрая компиляция.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ компиляция ΠΊΠΎΠ΄Π° рСкомСндуСтся, ΠΊΠΎΠ³Π΄Π° извСстно, Ρ‡Ρ‚ΠΎ исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², Π½ΠΎ Π½Π΅ содСрТат ΠΈΡ… Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС, ΠΈΠ»ΠΈ Ссли трСбуСтся Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ Π² ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° см. Π² Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… /Yc (созданиС Ρ„Π°ΠΉΠ»Π° ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°) ΠΈ /Yu (использованиС Ρ„Π°ΠΉΠ»Π° ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°). Для создания ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ /Yc. ΠŸΡ€ΠΈ использовании с Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€Π°Π³ΠΌΠΎΠΉ hdrstop ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ /Yc позволяСт ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ»Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², Ρ‚Π°ΠΊ ΠΈ исходный ΠΊΠΎΠ΄. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ /Yu, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ компиляции. МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ /Fp с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ /Yc ΠΈ /Yu, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ имя ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ.

Π’ справочных Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…, посвящСнных ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ компилятора /Yu ΠΈ /Yc, ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ способы доступа ΠΊ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ΠŸΡ€Π°Π²ΠΈΠ»Π° согласованности ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ²

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„Π°ΠΉΠ»Ρ‹ PCH содСрТат свСдСния ΠΎ срСдС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ свСдСния ΠΎΠ± адрСсах памяти для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ„Π°ΠΉΠ» PCH слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‚ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π±Ρ‹Π» создан.

ΠŸΡ€Π°Π²ΠΈΠ»Π° цСлостности для ΠΏΠΎΡ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ использования ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ²

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ компилятора /Yu позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» PCH слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

ΠŸΡ€ΠΈ использовании Ρ„Π°ΠΉΠ»Π° PCH компилятор ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ срСду компиляции, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компилятора, ΠΏΡ€Π°Π³ΠΌΡ‹ ΠΈ Ρ‚. Π΄., ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΈ создании Ρ„Π°ΠΉΠ»Π° PCH, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ½ΠΎΠ΅. Если компилятор ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ½ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎ возмоТности опрСдСляСт Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ. Π’Π°ΠΊΠΈΠ΅ прСдупрСТдСния Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с Ρ„Π°ΠΉΠ»ΠΎΠΌ PCH. Они просто ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‚ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°Ρ…. ВрСбования ΠΊ согласованности для Ρ„Π°ΠΉΠ»ΠΎΠ² PCH описаны Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ….

Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² компилятора

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компилятора ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ нСсогласованности ΠΏΡ€ΠΈ использовании Ρ„Π°ΠΉΠ»Π° PCH:

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹, созданныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° прСпроцСссора (/D), Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Π² компиляциях, создавшими Ρ„Π°ΠΉΠ» PCH, ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ компиляциСй. БостояниС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… констант Π½Π΅ провСряСтся, Π½ΠΎ ΠΏΡ€ΠΈ ΠΈΡ… измСнСниях ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ нСпрСдсказуСмыС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

Π€Π°ΠΉΠ»Ρ‹ PCH Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ/E ΠΈ /EP.

Π€Π°ΠΉΠ»Ρ‹ PCH Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ созданы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° создания свСдСний ΠΎ просмотрС (/FR) ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (/Fr), ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ компиляции, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ» PCH, смогут ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

C7 совмСстимо (/Z7)

Если ΠΏΡ€ΠΈ создании Ρ„Π°ΠΉΠ»Π° PCH этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ компиляции, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ» PCH, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Если ΠΏΡ€ΠΈ создании Ρ„Π°ΠΉΠ»Π° PCH ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ «C7 совмСстимо (/Z7)» ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½, ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ компиляции, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ» PCH ΠΈ/Z7, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Π°Ρ информация помСщаСтся Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ OBJ-Ρ„Π°ΠΉΠ», Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ символы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ PCH, нСдоступны ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΡƒ.

Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΡƒΡ‚ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²

Π’ Ρ„Π°ΠΉΠ»Π΅ PCH Π½Π΅ содСрТатся свСдСния ΠΎ ΠΏΡƒΡ‚ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСнялся ΠΏΡ€ΠΈ создании. ΠŸΡ€ΠΈ использовании Ρ„Π°ΠΉΠ»Π° PCH компилятор всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡƒΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ компиляции.

Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ исходного Ρ„Π°ΠΉΠ»Π°

ΠŸΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° использования Ρ„Π°ΠΉΠ»Π° ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° (/Yu) компилятор ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ всС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€Π°Π³ΠΌΡ‹), ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Π² исходном ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилирован. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ, указанная Ρ‚Π°ΠΊΠΈΠΌΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ прСпроцСссора, Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с компиляциСй, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° создания Ρ„Π°ΠΉΠ»Π° ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° (/Yc).

Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π°Π³ΠΌΡ‹

ΠŸΡ€Π°Π³ΠΌΡ‹, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Π²ΠΎ врСмя создания Ρ„Π°ΠΉΠ»Π° PCH, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° Ρ„Π°ΠΉΠ», с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ впослСдствии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„Π°ΠΉΠ» PCH. ΠŸΡ€Π°Π³ΠΌΡ‹ comment ΠΈ message Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΎΡΡ‚Π°Π²ΡˆΡƒΡŽΡΡ Ρ‡Π°ΡΡ‚ΡŒ компиляции.

Они Π²Π»ΠΈΡΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ»Π΅ PCH; ΠΎΠ½ΠΈ Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ впослСдствии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ» PCH:

Π­Ρ‚ΠΈ ΠΏΡ€Π°Π³ΠΌΡ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΎΡΡ‚Π°Π²ΡˆΡƒΡŽΡΡ Ρ‡Π°ΡΡ‚ΡŒ компиляции, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ:

alloc_text
auto_inline
check_stack
code_seg
data_seg

function
include_alias
init_seg
inline_depth

inline_recursion
intrinsic
optimize
pack

pointers_to_members
setlocale
vtordisp
warning

ΠŸΡ€Π°Π²ΠΈΠ»Π° цСлостности для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² компилятора /Yc ΠΈ /Yu

ΠŸΡ€ΠΈ использовании ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, созданного с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° /Yc ΠΈΠ»ΠΈ/Yu, компилятор сравниваСт Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ срСду компиляции с Ρ‚ΠΎΠΉ, которая сущСствовала ΠΏΡ€ΠΈ создании Ρ„Π°ΠΉΠ»Π° PCH. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ срСду, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² компилятора, ΠΏΡ€Π°Π³ΠΌ ΠΈ Ρ‚. Π΄.) для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ компиляции. Если компилятор ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ½ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎ возмоТности опрСдСляСт Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ. Π’Π°ΠΊΠΈΠ΅ прСдупрСТдСния Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с Ρ„Π°ΠΉΠ»ΠΎΠΌ PCH. Они просто ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‚ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°Ρ…. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ трСбования ΠΊ согласованности для ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ².

Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² компилятора

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ пСрСчислСны ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компилятора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ нСсогласованности ΠΏΡ€ΠΈ использовании ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€nameΠŸΡ€Π°Π²ΠΈΠ»ΠΎ
/DΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ констант ΠΈ макросовДолТны Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Π² компиляции, создавшСй ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ компиляции. БостояниС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… констант Π½Π΅ провСряСтся, Π½ΠΎ Ссли Ρ„Π°ΠΉΠ»Ρ‹ зависят ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… констант, ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ нСпрСдсказуСмыС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.
/E ΠΈΠ»ΠΈ /EPΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… прСпроцСссора Π² стандартный Π²Ρ‹Π²ΠΎΠ΄ΠŸΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ /E ΠΈΠ»ΠΈ /EP.
/FR ΠΈΠ»ΠΈ /FRΠ‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ свСдСний ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ исходного ΠΊΠΎΠ΄Π° ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ /Fr ΠΈ /FR Π±Ρ‹Π»ΠΈ допустимыми вмСстС с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ /Yu, ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ создании ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. ΠŸΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… компиляциях, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ свСдСния ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ исходного ΠΊΠΎΠ΄Π°. БвСдСния ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ SBR-Ρ„Π°ΠΉΠ», ΠΈ Π½Π° Π½Π΅Π³ΠΎ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ свСдСния CodeView. НСльзя ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ свСдСний ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ исходного ΠΊΠΎΠ΄Π°.
/GA, /GD, /GE, /Gw ΠΈΠ»ΠΈ /GWΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° WindowsΠ”ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Π² компиляции, создавшСй ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ компиляции. Если эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, выдаСтся ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅.
/ZIΠ‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ информацииЕсли ΠΏΡ€ΠΈ создании ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ компиляции, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Если ΠΏΡ€ΠΈ создании ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ /Zi Π½Π΅ Π±Ρ‹Π» Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ компиляции, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ /Zi, Π²Ρ‹Π΄Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Π°Ρ информация помСщаСтся Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ OBJ-Ρ„Π°ΠΉΠ», Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ символы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅, нСдоступны ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΡƒ.

БрСдство ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ для использования Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² исходных Ρ„Π°ΠΉΠ»Π°Ρ… C ΠΈ C++.

ИспользованиС ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… прСдставлСн ΠΎΠ±Π·ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ²: /Yc ΠΈ /Yu, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° /FP ΠΈ ΠΏΡ€Π°Π³ΠΌΡ‹ hdrstop. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ описываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ использования Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π’ ΠΊΠΎΠ½Ρ†Π΅ Ρ€Π°Π·Π΄Π΅Π»Π° приводится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° makefile ΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт ΠΈΠΌ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ ΠΊ использованию Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² makefile, располоТСнных Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ MFC\SRC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСтся Π²ΠΎ врСмя установки Visual Studio ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ Π² этих Ρ„Π°ΠΉΠ»Π°Ρ… makefile Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ прСдставлСнному Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ макросы слуТСбной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ обслуТивания ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚ (NMAKE) ΠΈ обСспСчиваСтся больший ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ процСссом сборки.

PCH-Ρ„Π°ΠΉΠ»Ρ‹ Π² процСссС построСния

Π‘Π°Π·Π° ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТится Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… исходных Ρ„Π°ΠΉΠ»Π°Ρ… C ΠΈΠ»ΠΈ C++, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΈ Ρ„Π°ΠΉΠ»Π°Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ². Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ„Π°ΠΉΠ» makefile ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ объСдинСниС этих элСмСнтов Π² исполняСмый Ρ„Π°ΠΉΠ». На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ рисункС ΠΏΠΎΠΊΠ°Π·Π°Π½Π° структура Ρ„Π°ΠΉΠ»Π° makefile, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ» ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. ИмСна макросов ΠΈ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° рисункС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° makefile для PCH ΠΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для PCH.

На рисункС для отобраТСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ процСсса сборки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ схСматичСских элСмСнта. ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ макрос; Ρ‚Ρ€ΠΈ макроса ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ². Π—Π°Ρ‚Π΅Π½Π΅Π½Π½Ρ‹Π΅ области ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ дСйствиС компиляции ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. Π‘Ρ‚Ρ€Π΅Π»ΠΊΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ макросы ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π²ΠΎ врСмя процСсса компиляции ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ.

Stdafx h Ρ‡Ρ‚ΠΎ это. vc30ow1. Stdafx h Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. Stdafx h Ρ‡Ρ‚ΠΎ это-vc30ow1. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Stdafx h Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° vc30ow1
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ„Π°ΠΉΠ»Π° makefile, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ» ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°

Начиная с Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, STABLEHDRS ΠΈ BOUNDRY ΡΠ²Π»ΡΡŽΡ‚ΡΡ макросами NMAKE, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ пСрСчислитС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, скорСС всСго, Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ пСрСкомпиляции. Π­Ρ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

CL /c /W3 /Yc$(BOUNDRY) applib.cpp myapp.cpp

Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Ρ„Π°ΠΉΠ» ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° (STABLE.pch) Π½Π΅ сущСствуСт ΠΈΠ»ΠΈ Ссли Π²Ρ‹ вноситС измСнСния Π² Ρ„Π°ΠΉΠ»Ρ‹, пСрСчислСнныС Π² Π΄Π²ΡƒΡ… макросах. Π’ любом случаС Ρ„Π°ΠΉΠ» ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ², пСрСчислСнных Π² макросС STABLEHDRS. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅ послСдний Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² макросС BOUNDRY.

Π€Π°ΠΉΠ»Ρ‹, пСрСчислСнныС Π² этих макросах, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ исходного ΠΊΠΎΠ΄Π° C ΠΈΠ»ΠΈ C++. (Один PCH-Ρ„Π°ΠΉΠ» нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с модулями C ΠΈ C++.) ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ макрос hdrstop для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции Π² ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ‹ Ρ‚ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² Ρ„Π°ΠΉΠ»Π΅. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ hdrstop.

Π”Π°Π»Π΅Π΅ APPLIB.obj Π½Π° схСмС прСдставляСт ΠΊΠΎΠ΄ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Он создаСтся ΠΈΠ· APPLIB.cpp, Ρ„Π°ΠΉΠ»ΠΎΠ², пСрСчислСнных Π² макросС UNSTABLEHDRS, ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированного ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°.

MYAPP.obj прСдставляСт ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Он создаСтся ΠΈΠ· Ρ„Π°ΠΉΠ»Π° MYAPP.cpp, Ρ„Π°ΠΉΠ»ΠΎΠ², пСрСчислСнных Π² макросС UNSTABLEHDRS, ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированного ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°.

НаконСц, создаСтся исполняСмый Ρ„Π°ΠΉΠ» (MYAPP.EXE) ΠΏΡƒΡ‚Π΅ΠΌ связывания Ρ„Π°ΠΉΠ»ΠΎΠ², пСрСчислСнных Π² макросС OBJS (APPLIB.obj ΠΈ MYAPP.obj).

ΠžΠ±Ρ€Π°Π·Π΅Ρ† Ρ„Π°ΠΉΠ»Π° makefile для PCH

Помимо макросов STABLEHDRS, BOUNDRY ΠΈ UNSTABLEHDRS, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½Π° рисункС «Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ„Π°ΠΉΠ»Π° makefile, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ» ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°» Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ PCH-Ρ„Π°ΠΉΠ»Ρ‹ Π² процСссС сборки, этот Ρ„Π°ΠΉΠ» makefile прСдоставляСт макрос CLFLAGS ΠΈ макрос LINKFLAGS. Π­Ρ‚ΠΈ макросы Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для пСрСчислСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² компилятора ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ сборкС ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ»ΠΈ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ вСрсии исполняСмого Ρ„Π°ΠΉΠ»Π° прилоТСния. Π’Π°ΠΊΠΆΠ΅ имССтся макрос LIBS, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ пСрСчислСны Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π­Ρ‚Π° функция позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„Π°ΠΉΠ» makefile Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ для Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… вСрсий ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ DEBUG=0 для Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… вСрсий. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ эквивалСнтными.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… makefile см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ ΠΏΠΎ NMAKE. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компилятора MSVC ΠΈ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° MSVC.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для PCH

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ»Π΅ makefile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описан Π² Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… PCH-Ρ„Π°ΠΉΠ»Ρ‹ Π² процСссС сборки ΠΈ ΠžΠ±Ρ€Π°Π·Π΅Ρ† Ρ„Π°ΠΉΠ»Π° makefile для PCH. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ содСрТат Π²Π°ΠΆΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *