Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΈΠΏΠ° Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ Π½ΡΠΆΠ΅Π½
8.2 Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π’ΠΈΠΏΠ°
8.2 Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π’ΠΈΠΏΠ°
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ ΡΠΈΠΏΠΎΠ² (ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ_ΡΠΈΠΏΠ°) ΡΠ²Π»ΡΡΡΡΡ:
ΠΏΡΠΎΡΡΠΎΠ΅_ΠΈΠΌΡ_ΡΠΈΠΏΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ_ΠΊΠ»Π°ΡΡΠ° enum-ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ»ΠΎΠΆΠ½ΡΠΉ_ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ_ΡΠΈΠΏΠ° const
Π‘Π»ΠΎΠ²ΠΎ const ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΊ Π»ΡΠ±ΠΎΠΌΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΌΡ ΡΠΏΠ΅ΡΡΠΈΠΊΠ°ΡΠΎΡΡ_ΡΠΈΠΏΠ°. Π ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π°Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°_ΡΠΈΠΏΠ°. ΠΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° const Π½Π΅ ΡΠ»ΡΠ΅ΡΡΡ lvalue. ΠΡΠ»ΠΈ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΎΠΏΡΡΠ΅Π½ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΈΠΏΠ°, ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ int.
ΠΏΡΠΎΡΡΠΎΠ΅_ΠΈΠΌΡ_ΡΠΈΠΏΠ°: char short int long unsigned float double const void
Π‘Π»ΠΎΠ²Π° long, short ΠΈ unsigned ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΠ»Π°Π³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΡΠΈΠΏΡ int; unsigned ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΡΠΈΠΏΠ°ΠΌ char, short ΠΈ long.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡΡΡ Π² #8.5 ΠΈ #8.10 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
ΡΠ»ΠΎΠΆΠ½ΡΠΉ_ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ_ΡΠΈΠΏΠ°: ΠΊΠ»ΡΡ typedef-ΠΈΠΌΡ ΠΊΠ»ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ
ΠΊΠ»ΡΡ: class struct union enum
Π‘Π»ΠΎΠΆΠ½ΡΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ°ΠΌ, Π³Π΄Π΅ ΠΈΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΊΡΡΡΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΡΠ»ΠΈ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ°Π½Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π½Π΅ Π±ΡΠ»ΠΎ, ΡΠ»ΠΎΠΆΠ½ΡΠΉ_ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ_ΡΠΈΠΏΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅_ΠΈΠΌΠ΅Π½ΠΈ, ΡΠΌ. #8.8.
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅
12.5.1 Π Π΅Π΄Π°ΠΊΡΠΎΡΡ ΡΠΈΠΏΠ° vi
12.5.1 Π Π΅Π΄Π°ΠΊΡΠΎΡΡ ΡΠΈΠΏΠ° vi Π Π΅Π΄Π°ΠΊΡΠΎΡ vi (ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΌΠΊΠΈ) ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π»ΡΠ±ΡΡ UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ Π²ΠΎ Π²ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Ρ Linux. ΠΡΠ΅ ΠΏΡΠΈΠ²Π΅ΡΠΆΠ΅Π½ΡΡ UNIX, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΡΠ°ΠΆ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠΈΠΌΠΈ ΠΠ‘, Π·Π½Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠΎΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
R.7.1.6 Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠΈΠΏΠ°
R.7.1.6 Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠΈΠΏΠ° Π ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΈΠΏΠ° ΠΎΡΠ½ΠΎΡΡΡΡΡ:ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ-ΡΠΈΠΏΠ°: ΠΈΠΌΡ-ΠΏΡΠΎΡΡΠΎΠ³ΠΎ-ΡΠΈΠΏΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ-ΠΊΠ»Π°ΡΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ-ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ-ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ-ΡΠΈΠΏΠ° :: ΠΈΠΌΡ-ΠΊΠ»Π°ΡΡΠ° const volatileΠΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠ΅ ΡΠ»ΠΎΠ²Π° const ΠΈ volatile ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ Π»ΡΠ±ΠΎΠΉ Π·Π°ΠΊΠΎΠ½Π½ΠΎΠΉ
R.14 Π¨ΠΠΠΠΠΠ« Π’ΠΠΠ
R.14.1 Π¨Π°Π±Π»ΠΎΠ½Ρ ΡΠΈΠΏΠ°
R.14.4 Π¨Π°Π±Π»ΠΎΠ½Ρ ΡΠΈΠΏΠ° Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ
R.14.4 Π¨Π°Π±Π»ΠΎΠ½Ρ ΡΠΈΠΏΠ° Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Π¨Π°Π±Π»ΠΎΠ½ ΡΠΈΠΏΠ° Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΡΡΡΠΎΠΈΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ sort ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:templateβΉclass TβΊ void sort(vectorβΉTβΊ);Π¨Π°Π±Π»ΠΎΠ½ ΡΠΈΠΏΠ° Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
R.17.8 Π¨Π°Π±Π»ΠΎΠ½Ρ ΡΠΈΠΏΠ°
ΠΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΈΠΏΠ° Sub
ΠΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΈΠΏΠ° Sub Π’Π΅ΡΠΌΠΈΠ½ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΡΠΈΠΏΠ° Sub ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½Π΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΡΠΊΠ»ΡΠΆΠΈΠΌ, Π½ΠΎ ΠΎΠ½ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΎΡΠ½ΠΎ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ ΡΡΡΡ Π΄Π΅Π»Π°. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ± ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌ ΠΈ, ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ, Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π³Π»Π°Π²Π½ΡΠΌΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌΠΈ. Π VBA, Ρ ΠΎΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΈΠΏΠ°
ΠΡΠ·ΠΎΠ² ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΡΠΈΠΏΠ° Sub
ΠΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΈΠΏΠ° Function
ΠΡΠ»ΠΈΡΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΡΠΈΠΏΠ° Function ΠΎΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΡΠΈΠΏΠ° Sub
ΠΡΠ»ΠΈΡΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΡΠΈΠΏΠ° Function ΠΎΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΡΠΈΠΏΠ° Sub ΠΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° Function ΠΈ ΡΠΈΠΏΠ° Sub Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅: Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ ΡΠΈΠΏΠ° Function ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π³Π΄Π΅-ΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ, Π·Π°Π΄Π°ΡΡΠΈΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠΌΡ
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° CarControl
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° CarControl ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Windows Control Library Π² Visual Studio 2005 ΠΈcΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ UserControl Test Container (ΠΈΡΠΏΡΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ). ΠΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΆΠ΅ ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅Π³ΠΎ ActiveX Control Test Container (ΠΈΡΠΏΡΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΠΎΡΠΎΠ±ΡΡ Π²ΠΈΠ΄Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, Π° ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ . ΠΠ΅ΡΠ²ΡΠΉ Π²ΠΈΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ΅Π³ ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠΎΡΠ»Π΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈΠΌΡ ΡΠΈΠΏΠ° (ΡΠ΅Π³) ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ
Π’ΡΠΈ ΡΠΈΠΏΠ° Β«ΠΎΠ΄Π΅ΠΆΠΊΠΈΒ»
Π’ΡΠΈ ΡΠΈΠΏΠ° Β«ΠΎΠ΄Π΅ΠΆΠΊΠΈΒ» ΠΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ Π²ΠΈΠ΄ΠΎΠ² ΠΊΠ΅ΠΉΡΠΎΠ² Π΄Π»Ρ Π½ΠΎΡΡΠ±ΡΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅ΡΡΠΈ ΠΊ ΡΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡΠΌ:Π‘ΡΠΌΠΊΠ°. ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΡΡΠ΅Π»ΡΠΌΠΈ-ΡΡΠΌΠΊΠ°ΠΌΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ 90 % ΡΡΠ½ΠΊΠ°. ΠΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄ ΠΆΠ΅Π½ΡΠΊΠΎΠΉ ΡΡΠΌΠΎΡΠΊΠΈ, ΠΏΠΎΡΡΡΠ΅Π»Ρ, ΠΊΠΎΡΡΠ°, ΡΠ°ΠΊΠ²ΠΎΡΠΆΠ°, Π΄ΠΈΠΏΠ»ΠΎΠΌΠ°ΡΠ°, ΡΠ΅ΠΌΠΎΠ΄Π°Π½Π°. ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ
3.2.5 ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ°
3.2.5 ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° ΠΡΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΏΠ° Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ. Π―Π²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π΄Π°Π΅Ρ Π·Π½Π°ΡΠ½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:float r = float(1);ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΠ΅Π»ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 1 ΠΊ Π·Π½ΡΠ΅Π½ΠΈΡ Ρ
7.2.7 ΠΠΎΠ»Ρ Π’ΠΈΠΏΠ°
7.2.7 ΠΠΎΠ»Ρ Π’ΠΈΠΏΠ° Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΊ ΡΠ΄ΠΎΠ±Π½ΡΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΡ Π·Π°ΠΏΠΈΡΡ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΡ , Π½Π°Π΄ΠΎ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ: ΠΡΠ»ΠΈ Π·Π°Π΄Π°Π½ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΈΠΏΠ° base*, ΠΊΠ°ΠΊΠΎΠΌΡ ΠΏΡΠΎΠΈΠ²ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΈΠΏΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΎΠ±Π΅ΠΊΡ? ΠΡΡΡ ΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
8.1 Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΠ»Π°ΡΡΠ° ΠΠ°ΠΌΡΡΠΈ
8.1 Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΠ»Π°ΡΡΠ° ΠΠ°ΠΌΡΡΠΈ Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ β ΡΡΠΎ:ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ_ΠΊΠ»Π°ΡΡΠ°_ΠΏΠ°ΠΌΡΡΠΈ: auto static extern registerΠΠΏΠΈΡΠ°Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ auto, static ΠΈ register ΡΠ°ΠΊΠΆΠ΅ ΡΠ»ΡΠΆΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌΠΈ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠ»ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ extern Π½Π΅
Π€ΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²Π²ΠΎΠ΄ ΠΈ Π²ΡΠ²ΠΎΠ΄
Π€ΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π²Π΅ Π²Π°ΠΆΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈ Π²ΡΠ²ΠΎΠ΄Π°. Π£ΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΈ ΡΠ°Π±ΠΎΡΡ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΆΠ΅ ΡΠ΅ΠΉΡΠ°Ρ, ΡΠ°ΠΊ ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ.
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ % Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π²ΡΠΎΡΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ % Π½Π° Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΈ Ρ.Π΄. ΠΠ°Π»Π΅Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ»Π°Π³ΠΎΠ² ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ±ΡΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠΎΡΠΌΠ°ΡΠ°
%[ΡΠ»Π°Π³ΠΈ][ΡΠΈΡΠΈΠ½Π°][.ΡΠΎΡΠ½ΠΎΡΡΡ][Π΄Π»ΠΈΠ½Π°]ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ β ΡΡΠΎ ΡΠ°ΠΌΡΠΉ Π²Π°ΠΆΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. ΠΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΈΠΏ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΡΠΏΠΎΡΠΎΠ± Π΅Ρ Π²ΡΠ²ΠΎΠ΄Π°.
| Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ | Π§ΡΠΎ Ρ ΠΎΡΠΈΠΌ Π²ΡΠ²Π΅ΡΡΠΈ | ΠΡΠΈΠΌΠ΅Ρ |
|---|---|---|
| d ΠΈΠ»ΠΈ i | Π¦Π΅Π»ΠΎΠ΅ ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ Π² Π² Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ | 392 |
| u | Π¦Π΅Π»ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ° Π² Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ | 7235 |
| o | ΠΠ΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π² Π²ΠΎΡΡΠΌΠ΅ΡΠΈΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ | 657 |
| x | ΠΠ΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ | 7fa |
| X | ΠΠ΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π²Π΅ΡΡ Π½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ | 7FA |
| f ΠΈΠ»ΠΈ F | Π§ΠΈΡΠ»ΠΎ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ | 3.4563745 |
| e | ΠΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠΎΡΠΌΠ° Π΄Π»Ρ ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ | 3.1234e+3 |
| E | ΠΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠΎΡΠΌΠ° Π΄Π»Ρ ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ, Π²Π΅ΡΡ Π½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ | 3.1234E+3 |
| g | ΠΡΠ°ΡΡΠ°ΠΉΡΠ΅Π΅ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΡΠΎΡΠΌΠ°ΡΠΎΠ² f ΠΈ e | 3.12 |
| G | ΠΡΠ°ΡΡΠ°ΠΉΡΠ΅Π΅ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΡΠΎΡΠΌΠ°ΡΠΎΠ² F ΠΈ E | 3.12 |
| a | Π¨Π΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ | -0xc.90fep-2 |
| A | Π¨Π΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ, Π²Π΅ΡΡ Π½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ | -0xc.90FEP-2 |
| c | ΠΡΠΊΠ²Π° | a |
| s | Π‘ΡΡΠΎΠΊΠ° (Π½ΡΠ»Ρ-ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π±ΡΠΊΠ²) | Hello World |
| p | ΠΠ΄ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ | b8000000 |
| n | ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ. ΠΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° signed int. ΠΠΎ ΡΡΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΡΠΊΠ², ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ Π΄ΠΎ Π²ΡΡΡΠ΅ΡΠΈ %n | |
| % | ΠΠ²Π° ΠΈΠ΄ΡΡΠΈΡ Π΄ΡΡΠ³ Π·Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΏΡΠΎΡΠ΅Π½ΡΠ° Π²ΡΠ²ΠΎΠ΄ΡΡ Π·Π½Π°ΠΊ ΠΏΡΠΎΡΠ΅Π½ΡΠ° | % |
Π‘ΡΠ±-ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄Π»ΠΈΠ½Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π΄Π»ΠΈΠ½Ρ ΡΠΈΠΏΠ°. Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π΄Π»ΠΈΠ½Π° Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠΈΠΏΠΎΠΌ, ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
| ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ | |||||||
|---|---|---|---|---|---|---|---|
| ΠΠ»ΠΈΠ½Π° | d, i | u o x X | f F e E g G a A | c | s | p | n |
| (none) | int | unsigned int | double | int | char* | void* | int* |
| hh | signed char | unsigned char | signed char* | ||||
| h | short int | unsigned short int | short int* | ||||
| l | long int | unsigned long int | wint_t | wchar_t* | long int* | ||
| ll | long long int | unsigned long long int | long long int* | ||||
| j | intmax_t | uintmax_t | intmax_t* | ||||
| z | size_t | size_t | size_t* | ||||
| t | ptrdiff_t | ptrdiff_t | ptrdiff_t* | ||||
| L | long double | ||||||
Π€ΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²Π²ΠΎΠ΄
ΠΠ°ΠΊ ΠΈ Π² printf, ΡΠΈΡΠΈΠ½Π°, Π·Π°Π΄Π°Π½Π½Π°Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ * ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Ρ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠΈΡΠΈΠ½Ρ. Π€Π»Π°Π³ Π΄Π»ΠΈΠ½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠ°ΠΊΠΈΠΌ ΡΠ»Π°Π³ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ printf.
ΠΡΠΎΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ scanf ΠΈ printf Π΅ΡΡΡ Π΅ΡΡ ΡΡΠ΄ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π²Π²ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
ΠΡΠΎ Π½Π΅ ΠΏΠΎΠ»Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈ Π²ΡΠ²ΠΎΠ΄Π°. Π’Π°ΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠΎΡΠ΅, Π½ΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΡΠ°ΠΉΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ.
ΠΠ΅ΠΏΠ΅ΡΠ°ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ
Π ΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ ΡΡΠ΄ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ Π½Π° ΠΏΠ΅ΡΠ°ΡΡ, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Π°. ΠΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π»ΠΈΠ±ΠΎ Π² Π²ΠΈΠ΄Π΅ ΡΡΠΊΠ΅ΠΉΠΏ-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ: ΡΠΈΠΌΠ²ΠΎΠ»Π°, ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ ΡΠ»Π΅ΡΠ΅ΠΌ.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΠΈΠΏΠΎΠ²
Π―Π·ΡΠΊ Π‘ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π±Π°Π·ΠΎΠ²ΡΡ ΡΠΈΒΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ , Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ «ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ» ΡΠΈΠΏΠ°ΠΌΠΈ. ΠΠ°Π·Π²Π°Π½ΠΈΡ ΡΡΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π² Π’Π°Π±Π». 4.1.
Π’ΠΈΠΏΡ ΡΠ΅Π»ΡΡ Π’ΠΈΠΏΡ ΠΏΠ»Π°Π²Π°ΡΡΠΈΡ ΠΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ
signed char float void
signed short intsigned long int
unsignet short int unsigned long int
Π’Π°Π±Π». 4.1. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΈΠΏΡ.
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΠ΅ ΡΠΈΠΏΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΈΠΏΡ. Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΡ ΡΠΈΠΏΠΎΠ² ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 4.7.1. Π’ΠΈΒΠΏΡ signed char, signed int, signed short int ΠΈ signed long int
Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠ°ΠΌΠΈ unsigned Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΡΠΈΠΏΠ°ΠΌΠΈ ΡΠ΅Π»ΡΡ .
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΠΈΠΏΠΎΠ² float ΠΈ double ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠΈΠΏΡ «ΠΏΠ»Π°Π²Π°ΒΡΡΠΈΡ ». Π ΠΎΠ±»ΡΠ²Π»Π΅Π½ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ «ΡΠ΅Π»ΡΠΉ» ΠΈ «ΠΏΠ»Π°Π²Π°ΡΡΠΈΠΉ».
Π’ΠΈΠΏ void ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ±»ΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΒΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π’ΠΈΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 4.4.
ΠΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΠΈΠΏΠ° ΠΏΡΡΠ΅ΠΌ ΠΎΠ±»ΡΠ²ΒΠ»Π΅Π½ΠΈΡ typedef, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 4.7.2.
ΠΡΠΈ Π·Π°ΠΏΠΈΡΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΡΠΈΠΏΠΎΠ² Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ°Π±Π». 4.2. Π ΡΠ΅Π»ΡΡ ΡΠΈΠΏΠ°Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ signed ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΡΠ΅Π½ΠΎ. Π’Π°ΠΊ, Π΅ΡΠ»ΠΈ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ unsigned ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² Π·Π°ΒΠΏΠΈΡΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠΈΠΏΠ°, ΡΠΎ ΡΠΈΠΏ ΡΠ΅Π»ΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΠΊΠΎΠ²ΡΠΌ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠΏΡΡΠ΅Π½ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ signed.
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΠΎΠΏΡΠΈΠΈ ΠΊΠΎΠΌΒΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΈΠΏΠ° char ΡΠΎ Π·Π½Π°ΠΊΠΎΒΠ²ΠΎΠ³ΠΎ Π½Π° Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΡΠΉ. ΠΠΎΠ³Π΄Π° Π·Π°Π΄Π°Π½Π° ΡΠ°ΠΊΠ°Ρ ΠΎΠΏΡΠΈΡ, ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ char ΠΈΠΌΠ΅Π΅Ρ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ ΠΈ unsigned char, ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ sidned Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΏΡΠΈ ΠΎΠ±»ΡΠ²Π»Π΅Π½ΠΈΠΈ ΡΠΈΠΌΒΠ²ΠΎΠ»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΈΠΏΠ° Π‘ΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅
signed int signed, int
signed short int short, signed short
signed long int long, signed long
unsigned int unsigned
unsigned short int unsignet short
unsignet long int unsignet long
Π’Π°Π±Π». 4.2. Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΈ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π² ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΠΊΒΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΡΠΎΡΠΌΡ, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π² Π’Π°Π±Π». 4.2, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΒΡΡ, ΡΡΠΎ char ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π·Π½Π°ΠΊΠΎΠ²ΡΠΉ.
Π ΡΠ°Π±Π». 4.3 Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ: ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΒΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠΎΡΒΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΠΏ void Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΎΠ½ Π½Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ Π² ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ.
Π’ΠΈΠΏ ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΠ±Π»Π°ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
unsigned char 1 Π±Π°ΠΉΡ 0 Π΄ΠΎ 255
unsigned Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ
unsigned short 2 Π±Π°ΠΉΡΠ° 0 Π΄ΠΎ 65535
unsigned long 4 Π±Π°ΠΉΡΠ° 0 Π΄ΠΎ 4.294.967.295
float 4 Π±Π°ΠΉΡΠ° IEEE ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅
double 8 Π±Π°ΠΉΡ IEEE ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅
Π’Π°Π±Π» 4.3 Π Π°Π·ΠΌΠ΅Ρ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΎΠ±Π»Π°ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠΎΠ²
ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΡ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΠΈΠΏ unsigned char ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ Ρ ΠΎΠ±Π»Π°ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΡ 0 Π΄ΠΎ 255.
ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΎΠ±Π»Π°ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ² int ΠΈ unsigned int Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ int (ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ ΠΈ Π±Π΅Π· Π·Π½Π°ΠΊΠ°) ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌΡ ΡΠ°Π·ΠΌΠ΅ΒΡΡ ΡΠ΅Π»ΠΎΠ³ΠΎ Π½Π° Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° 16-ΡΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΡΠΈΠΏ int Π²ΡΠ΅Π³Π΄Π° 16 ΡΠ°Π·ΡΡΠ΄ΠΎΠ² ΠΈΠ»ΠΈ 2 Π±Π°ΠΉΡΠ°. ΠΠ° 32-ΡΡ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΡΠΈΠΏ int Π²ΡΠ΅Π³Π΄Π° 32 ΡΠ°Π·ΡΡΠ΄Π° ΠΈΠ»ΠΈ 4 Π±Π°ΠΉΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΈΠΏ int ΡΠΊΒΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ΅Π½ ΡΠΈΠΏΠ°ΠΌ short int ΠΈΠ»ΠΈ long int Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΒΡΠΈΠΈ.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΠΈΠΏ unsigned int ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ΅Π½ ΡΠΈΠΏΠ°ΠΌ unsigned short ΠΈΠ»ΠΈ unsigned long. Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΠΈΠΏΠΎΠ² int ΠΈ unsigned int ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π½Π° Π‘ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π»ΡΠΌΠΈ Π²Π΅Π»ΠΈΡΠΈΠ½Π°ΠΌΠΈ Π½Π° Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅.
ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΈΠΏΠΎΠ² int ΠΈ unsigned int ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π·Π°Π²ΠΈΡΡΡΠΈΠ΅ ΠΎΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° int ΠΈ unsigned int ΠΌΠΎΒΠ³ΡΡ Π±ΡΡΡ Π½Π΅ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡ. ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΡΡΡΠΈΡΡ ΠΏΡΡΠ΅ΠΌ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Ρ sizeof ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΈ ΡΠ°Π±Π»ΠΎΠ½Ρ
Π’Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ»ΠΎΠ² Π²Π²Π΅Π΄Π΅Ρ Π² ΡΡΡΠΏΠΎΡ Π»ΡΠ±ΠΎΠ³ΠΎ Π½Π΅ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΠΎ Π½Π° C++ Russia 2019 Piter ΠΠΈΡ Π°ΠΈΠ» ΠΠ°ΡΡΠΎΡΠΎΠ² (mmatrosov) ΡΠ°Π·Π»ΠΎΠΆΠΈΠ» ΠΏΠΎ ΠΏΠΎΠ»ΠΎΡΠΊΠ°ΠΌ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠ»ΠΈ Π΄Π»Ρ Π²Π°Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄Π°, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΈ ΠΈΠ·ΡΡΠΈΡΡ ΡΠΏΠ°ΡΠ³Π°Π»ΠΊΠΈ ΠΠΈΡ Π°ΠΈΠ»Π°.
ΠΠ· Π΄ΠΎΠΊΠ»Π°Π΄Π° Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅:
ΠΠ°Π»Π΅Π΅ β ΠΏΠΎΠ²Π΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ Π»ΠΈΡΠ° ΡΠΏΠΈΠΊΠ΅ΡΠ°.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΎΡΠΈΠΈ
ΠΡΠΎΠ²Π΅Π΄Π΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΊΡΠΊΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π΄ΠΎΠΊΠ»Π°Π΄Π°.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° C++:
Π ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ cpp-ΡΠ°ΠΉΠ»Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ hpp-ΡΠ°ΠΉΠ»Ρ. ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ²ΡΠΌ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ. ΠΠ· ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΠ½ ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ (translation units), Π² ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ±ΡΠ°Π½Ρ Π²ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ (headers), Π° Π·Π° Π½ΠΈΠΌΠΈ ΠΈΠ΄Π΅Ρ ΡΠ΅Π»ΠΎ cpp-ΡΠ°ΠΉΠ»Π°. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΈΡ Π² ΡΠ²Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π½Π° ΠΆΠ΅ΡΡΠΊΠΎΠΌ Π΄ΠΈΡΠΊΠ΅, Π° ΠΎΠ½ΠΈ Π»Π΅ΠΆΠ°Ρ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠΎΠ³Π΄Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Ρ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΡΠ°ΠΉΠ». Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ (linker), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² ΠΈΡΠΎΠ³ΠΎΠ²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π£ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°Π΅Π², Π³Π΄Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, Π½ΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ).
ΠΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΠΎΠ½ΡΡΠΈΡ linkage. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΡΠ΅Π½ΡΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΡΠ°ΠΉΠ»Π΅ a.cpp ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ sqr():
Π Π² ΡΠ°ΠΉΠ»Π΅ b.cpp Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π΅Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ check():
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² a.cpp ΠΈΠΌΠ΅Π΅Ρ external linkage. ΠΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π² a.obj ΠΎΠ½ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ sqr(), Π° Π² b.obj β ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠ΅ΡΠΊΠΎΠΉ, ΡΡΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΡΠ°ΠΉΠ»Π΅ Π»Π΅ΠΆΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ sqr(), ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ Π΅Π³ΠΎ Π½Π°ΠΉΠ΄Π΅Ρ. ΠΡΠ»ΠΈ ΠΆΠ΅ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ static, ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΡΠΎΠ±Π΅ΡΠ΅ΡΡΡ ΠΈΠ·-Π·Π° ΠΎΡΠΈΠ±ΠΊΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ sqr() Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ internal linkage, ΡΠΎ Π΅ΡΡΡ Π±ΡΠ΄Π΅Ρ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° Π² Π΄ΡΡΠ³ΠΈΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ, ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ Π΅Ρ Π½Π΅ Π½Π°ΠΉΠ΄ΡΡ.
ΠΡΠΎΠΌΠ΅ external linkage ΠΈ internal linkage ΡΡΡΠ½ΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΡΠ°ΡΡΡ no linkage. Π’Π°ΠΊΠ° ΡΡΡΠ½ΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π°. Π’ΠΈΠΏΠΈΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ β Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ.
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΎΠΌΠ½ΠΈΠΌ ΡΠΈΠΏΡ storage duration Π² C++:
Storage duration ΠΈ linkage ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΡΡΡΡ ΡΡΠ΄ΠΎΠΌ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ»ΠΎΠ² (storage class specifiers) β static, extern, thread_local ΠΈ mutable. Mutable Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ Storage duration ΠΈ linkage, ΠΈ ΠΎΠ± ΡΡΠΎΠΌ Π² Π΄ΠΎΠΊΠ»Π°Π΄Π΅ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ, Π½ΠΎ ΠΎΠ½ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ storage class specifier.
ΠΠ° ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠΊΡΠΊΡΡΡΠ΅ ΠΌΡ ΠΎΡΠ²Π΅ΡΠΈΠ»ΠΈ Π½Π° ΡΡΠΈ Π²ΠΎΠΏΡΠΎΡΠ°:
Internal ΠΈ external linkage
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ. Π Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ common.hpp ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ Π΄Π²Π΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ:
Π Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ a.cpp ΠΈ b.cpp Π²ΠΊΠ»ΡΡΠΈΠ»ΠΈ ΡΡΠΎΡ hpp-ΡΠ°ΠΉΠ»:
ΠΡΠΎ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠΌΠ΅Π½ΠΈ name. ΠΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΡΡΠ³Π°Π΅ΡΡΡ Π½Π° thickness. ΠΠΎΡΠ΅ΠΌΡ?
Any of the following names declared at namespace scope have internal linkage:
ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ ΠΎΠ±Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ const-qualified, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠΌΠ΅ΡΡ internal linkage, ΠΈ ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π² Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡ. ΠΠ΄Π½Π°ΠΊΠΎ name β ΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΈ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ const ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ. Π’ΠΎ Π΅ΡΡΡ ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, Π½ΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ. Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌ, Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π°ΠΏΠΈΡΡ:
Π’Π΅ΠΏΠ΅ΡΡ name ΡΡΠ°Π» ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΠΏΠΎΠ»ΡΡΠΈΠ» internal linkage, ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΡΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ name β ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ», Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ constexpr Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²Π»Π΅ΡΠ΅Ρ Π·Π° ΡΠΎΠ±ΠΎΠΉ const, ΠΏΠ»ΡΡ linkage constexpr ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ Π² ΡΠ²Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΎΠΏΠΈΡΠ°Π½ Π² ΡΠΎΠΌ ΠΆΠ΅ Π°Π±Π·Π°ΡΠ΅. ΠΠΎΡΡΠΎΠΌΡ ΠΎΠ±Π΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈΠΌΠ΅ΡΡ internal linkage.
Any of the following names declared at namespace scope have internal linkage:
ΠΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ. Π common.hpp ΠΎΡΡΠ°Π²ΠΈΠΌ name ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ getName(), ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈΠ· ΡΠ°Π·Π½ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ:
Π a.cpp ΠΌΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ Π°Π΄ΡΠ΅ΡΠ° Π±ΡΡΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ name.data() ΠΈ getName():
Π b.cpp ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ getName():
ΠΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ name Π΄ΠΎΡΡΡΠΏΠ½Π° Π² ΠΎΠ±Π΅ΠΈΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ. ΠΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π°Ρ Π»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ? ΠΠ΅Ρ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ false, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΊΠΎΠΏΠΈΡ name, Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π² dumbCmp() ΠΈΠ΄Π΅Ρ Π½Π΅ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ.
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ΄Π°Π»Π° true, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ name ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ inline:
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎ Π²ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ name, ΠΈ ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΡΠΉ external linkage. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ²ΠΎΡ ΠΊΠΎΠΏΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΡΡΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΠΎΠΏΠ°Π΄Π΅Ρ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΡΠΎ ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΏΠΎΠΌΠ΅ΡΠΊΡ, ΡΡΠΎ ΡΡΠΎ weak ΡΠΈΠΌΠ²ΠΎΠ». Π ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ ΠΏΡΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΠ±Π΅ΡΠ΅Ρ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½. Π ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ Π½Π΅Ρ ΠΏΠΎΠ½ΡΡΠΈΡ external weak linkage, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ external linkage. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΠΏΡΠΎΡΠΈΡΡ ΡΡΠΈΠ»ΠΈΡΡ ΡΠΈΠΏΠ° nm ΠΈΠ»ΠΈ dumpbin ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅, ΡΠΎ ΠΎΠ½ΠΈ Π²ΡΠ²Π΅Π΄ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ external weak linkage.
ΠΡΠΎ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ²ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»Π°ΡΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ constexpr:
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ constexpr-qualified, ΡΠΎ ΠΎΠ½Π° ΡΡΠΈΡΠ°Π΅ΡΡΡ inline. Π ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ inline Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΠΊΠΆΠ΅ Π²Π»Π΅ΡΠ΅Ρ external weak linkage. Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ C++ inline Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ Π²ΡΠ±Π΅ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ.
ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ main.cpp, Π³Π΄Π΅ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠ»Π°ΡΡ Local ΠΈ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ Π² Π½Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ foo():
ΠΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π² other.cpp ΡΠΎΠΆΠ΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π·Π°Π²Π΅Π» ΠΊΠ»Π°ΡΡ Local ΠΈ ΡΡΠ½ΠΊΡΠΈΡ foo():
Π ΠΈΡΠΎΠ³Π΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π² ΡΠ°Π·Π½ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ. ΠΡΠΈΡΡΠΌ ΡΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°Π·Π½ΡΠ΅. Π’Π°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΌΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ. Π’ΠΎ Π΅ΡΡΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ Π²ΡΡ, ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΆΠ΅ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
GCC ΡΡΠΈΡΠ°Π΅Ρ, ΡΡΠΎ Local Π² ΡΠ°Π·Π½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ β ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠ»Π°ΡΡ, Π² Π½ΡΠΌ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ foo(). ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π½Π°Π΅Ρ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠ°Π·Π½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΠΎΠ±ΡΠ·Π°Π½Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΠΎΠ½ Π²Π·ΡΠ» ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΏΠΎΠΏΠ°Π²ΡΠ΅Π΅ΡΡ β ΠΈΠ· main.cpp. ΠΡΡΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠ³ Π±Ρ Π²ΡΠ²Π΅ΡΡΠΈ ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅.
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ Local ΠΈΠΌΠ΅Π» external linkage. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΊΠ»Π°ΡΡΡ Π² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ (unnamed namespace):
ΠΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅ΡΡ internal linkage, ΡΠΎ Π΅ΡΡΡ Π½ΠΈΡΠ΅Π³ΠΎ ΠΈΠ· translation unit Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π°ΡΡΠΆΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ:
Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π² ΠΊΡΡΡ
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ storage duration ΠΈ linkage:
ΠΠ»Ρ dynamic storage duration Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ linkage, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΡ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΊΡΡΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. ΠΠ»Ρ automatic storage duration ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΡΠΎΠ»ΡΠΊΠΎ no linkage, Π²Π΅Π΄Ρ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΈ Π² scope, ΡΠΎ Π΅ΡΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΡΠΎΠΌΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ, ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ thread_local ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ .
Π§ΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠΉ storage duration Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π»ΠΎΠΊ-ΡΡ Π΅ΠΌΡ:
ΠΡΠ»ΠΈ ΡΡΡΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ thread_local, ΡΠΎ Ρ Π½Π΅Π΅ thread storage duration. ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ, ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° scope. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ, ΡΠΎ Ρ Π½Π΅Π΅ Π²ΡΠ΅Π³Π΄Π° static storage duration. ΠΠ»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΡΠ»Π΅Π½Π° ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° static. ΠΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΡΡ, ΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ, ΠΈΠ½Π°ΡΠ΅ β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΡΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΏΡΠΎΠ½Π°Π±Π»ΡΠ΄Π°Π»ΠΈ, ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ Π²ΠΈΠ΄ΠΎΠ² ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ:
ΠΠΎΠ»ΠΎΠ½ΠΊΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠ°Π·Π½ΡΠΌ Π²ΠΈΠ΄Π°ΠΌ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ, Π° ΡΡΡΠΎΠΊΠΈ β ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΡΡΡΠ½ΠΎΡΡΠΈ. Π‘Π²ΠΎΠΉΡΡΠ²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΡΡΠΎ Π½ΠΈΠΆΠ΅, ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΡΠ΅ΠΌ ΡΠ΅, ΡΡΠΎ Π²ΡΡΠ΅.
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ. ΠΠ· ΡΠ°Π±Π»ΠΈΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ½ΡΡΡ:
Π ΠΏΠΎΠ΄ Π·Π°ΠΏΠΈΡΡΡ Required ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΈ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ·Π°Π½Ρ ΠΈΠΌΠ΅ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΠΈΠ· ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΡΡΠΎΠ±Ρ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΠΎΠΏΠ°ΡΡΡ Π² ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ ΠΏΠΎΠ»Ρ ΠΊΠ»Π°ΡΡΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° static, ΡΠΎ ΠΎΠ½ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄ΡΡ Π² ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ extern
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π³Π΄Π΅ ΠΌΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π»ΠΈ Π±ΡΡΠ΅ΡΡ, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ inline, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ²Π΅Π»Π° true. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ.
ΠΠΎ C++17 Π½Π΅ Π±ΡΠ»ΠΎ inline-ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΈ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ name ΠΊΠ°ΠΊ extern:
Π’ΠΎΠ³Π΄Π° Π±Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»Π° external linkage ΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ»Π°ΡΡ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ (declaration). ΠΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π³Π΄Π΅-ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ²Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ name, ΠΈ ΠΌΡ Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π΅Π³ΠΎ Π² a.cpp :
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ Π±Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ°ΠΊΠΈΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ extern?
ΠΠΎ ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΌΠ΅ΡΡΠΎ extern Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ inline.
ΠΠΎΠ±Π°Π²ΠΈΠΌ extern Π² ΡΠ°Π±Π»ΠΈΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΡΠ²ΠΎΠΉΡΡΠ² ΠΈ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ:
ΠΠ»Ρ Π½Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ extern Π½Π΅ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ. ΠΠ»Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π°Π½Π½ΡΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈΠ·Π»ΠΈΡΠ΅Π½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π»ΡΠ±ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ extern. ΠΠΎ Π΄Π»Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ external linkage ΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡ Π΅Π΅ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
Practice time
ΠΡ ΡΠ΅ΠΎΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡ:
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΠ°Π±Π»ΠΈΡΡ. ΠΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° member variable. ΠΠ°ΠΊΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ?
ΠΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌ. constexpr ΠΈ static Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠ°Π·Π½ΡΡ ΠΌΠΈΡΠ°Ρ . constexpr Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΎΡ constexpr Π½Π΅ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΈ ΡΠ»Π΅Π΄Π° (Π½Ρ, ΡΠΎΡΠ½Π΅Π΅, ΠΎΡ Π½Π΅Π³ΠΎ ΠΎΡΡΠ°Π½Π΅ΡΡΡ const ΠΈΠ»ΠΈ inline, Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ ΡΠ²ΠΎΠΉΡΡΠ²). ΠΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, ΡΠ΅ ΠΆΠ΅ ΡΠ°ΠΌΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΆΠ΅ Π½Π° ΡΡΠ°ΠΏΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π Π½ΠΈΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ static, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΡΠ°Π΄ΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ Π½ΠΈΡ Π΅ΡΡΡ storage duration.
Π¨Π°Π±Π»ΠΎΠ½Ρ
Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ Π½Π΅ Π±ΡΠ²Π°Π΅Ρ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ (template entity), Π° Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π±Π»ΠΎΠ½Ρ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ (entity template). Π‘ΡΠ°Π²Π½ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΡΠ°Π±Π»ΠΎΠ½:
Π£ ΡΠ°Π±Π»ΠΎΠ½Π° Π΅ΡΡΡ Π½Π΅ΡΠ²Π½ΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠ°ΡΠΈΠΈ. ΠΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ ΡΠ°ΠΌ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡ ΠΎ Π½ΠΈΡ Π² ΡΠ°Π·Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ. ΠΡ linkage Π½Π΅ ΡΠ°ΠΊ Π²Π°ΠΆΠ΅Π½ ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ½ΡΡΠ΅Π½.
ΠΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ. ΠΠ°Π²Π΅Π΄Π΅ΠΌ ΡΡΠΈ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅:
ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ hpp-ΡΠ°ΠΉΠ» Π² Π΄Π²Π° cpp-ΡΠ°ΠΉΠ»Π°. ΠΠ°Π»Π΅Π΅ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅: b, cb ΠΈ icb. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΠΌΡ Π±Π΅ΡΠ΅ΠΌ Π°Π΄ΡΠ΅Ρ Ρ ΡΡΠΈΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠ°ΡΠΈΠΉ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ clang Π²ΡΠ΄Π°Π»:
ΠΡ Π²ΠΈΠ΄ΠΈΠΌ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ Π°Π΄ΡΠ΅ΡΠ°. ΠΠ½Π°ΡΠΈΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°Π±ΠΎΡΠ°Π»Π° Ρ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ. Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ gcc ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΠ»Ρ const bool cb Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ°. Π― Π΄Π°ΠΆΠ΅ Π·Π°Π΄Π°Π» Π²ΠΎΠΏΡΠΎΡ Π½Π° stackoverflow ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ:
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ inline Π΄Π»Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅Ρ ΡΠΌΡΡΠ»Π°. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΡΠ°ΠΊΠΎΠΉ inline, Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎΠ΄ΡΠΊΠ°ΠΆΠ΅Ρ, ΡΡΠΎ ΠΎΠ½ Π»ΠΈΡΠ½ΠΈΠΉ. ΠΡΠ»ΠΈ Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ ΡΠ²Π½ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ (Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ), ΡΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ inline ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ», ΠΈΠ½Π°ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠ°Π·Π½ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΠΏΡΠΈΠ²Π΅Π»ΠΎ Π±Ρ ΠΊ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ.
ΠΠ°ΠΊ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π½Π΅ΡΠ²Π½Π°Ρ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠ°ΡΠΈΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ³Π»ΠΎΠ²ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ. ΠΡΡΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ, Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ β ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠ°ΡΠΈΠΈ (explicit instantiation declaration).
ΠΡΡΡΡ Π² header.hpp Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ:
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ extern template ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΡΠ½ΠΎΡΡΡ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ:
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠΎ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠ°ΡΠΈΠΈ. ΠΡΠ»ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΠΎΠ½ Π²ΡΡΡΠ΅ΡΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΎΠ½ Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅Ρ Π½Π΅ΡΠ²Π½ΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠ°ΡΠΈΡ, Π° ΠΏΡΠΎΡΡΠΎ ΠΎΡΡΠ°Π²ΠΈΡ ΠΏΠΎΠΌΠ΅ΡΠΊΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ, ΡΡΠΎΠ±Ρ ΡΠΎΡ ΠΈΡΠΊΠ°Π» ΡΠ²Π½ΡΡ ΠΈΠ½ΡΡΠ°Π½ΠΈΡΠΈΠ°ΡΠΈΡ Π² Π΄ΡΡΠ³ΠΈΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ. Π ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠ°ΡΠΈΠΈ, ΠΊΡΠ΄Π°-ΡΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½Π°Ρ ΡΠ°Π±Π»ΠΎΠ½Π½Π°Ρ ΡΡΡΠ½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΠΈΠΏΠΎΠ², ΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π² ΡΠ²Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠ°ΡΠΈΠΈ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΡΡΠΎΡ ΡΠ°Π±Π»ΠΎΠ½ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΠΈΠΏΠ°ΠΌΠΈ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ ΡΠ²Π½ΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠ°ΡΠΈΡ, ΡΠΎ ΡΠ΅Π»ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ±ΡΠ°ΡΡ.
ΠΠΎΠ»Π³ΠΈΠΉ ΠΏΡΡΡ ΠΊ const
ΠΠΎΠ½ΡΡΠ°Π½ΡΡ Π΄ΠΎ C++17 ΠΌΠΎΠ³Π»ΠΈ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΊΡΡΠ΅ΠΉ ΡΠ°Π·Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ²:
Π’ΡΡ Π²ΡΠΎΠ΄Π΅ Π±Ρ ΡΠΆΠ΅ Π²ΡΠ΅ Π·Π½Π°ΡΡ, ΡΡΠΎ ΡΠ°ΠΊ Π΄Π΅Π»Π°ΡΡ Π½Π΅ ΡΡΠΎΠΈΡ.
Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΡΠ°Π·ΠΌΠ΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΊΠ»ΡΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΠΈΡ Π°Π΄ΡΠ΅ΡΠ°.
ΠΠ΅ΠΏΠ»ΠΎΡ ΠΎ, Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ, ΠΏΡΠΎΠΏΠ°Π΄Π°Π΅Ρ, ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΊΠ°ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΡΡΠΎ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ.
ΠΠ΅ΡΡΠΌΠ° Π½Π΅ΠΏΠ»ΠΎΡ ΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ².
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ C++17 ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ inline, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. Π Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
ΠΡΠ»ΠΈ ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π² cpp-ΡΠ°ΠΉΠ»Π΅, ΡΠΎ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ:
Π£Π±ΠΈΡΠ°Π΅ΠΌ inline, ΠΈΠ½Π°ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ΠΉ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ. ΠΡΡΠ°ΡΠΈ, Π² module interface unit Π² C++20 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ.
ΠΡΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° β ΡΠ»Π΅Π½ ΠΊΠ»Π°ΡΡΠ°, ΡΠΎ ΠΎΠ½Π° ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ static:
ΠΡΠ»ΠΈ ΠΊ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ constexpr, ΡΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π²ΡΡΡΠ½ΡΡ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ inline, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄Π»Ρ ΠΏΠΎΠ»Ρ ΠΊΠ»Π°ΡΡΠ° Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° β Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, ΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½ΠΎ ΡΠΎ static:
Π¦Π΅Π»ΡΡ 8 Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ². ΠΠΎ Π²ΡΠ΅ Π½Π΅ ΡΠ°ΠΊ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΅ΡΡΡ. ΠΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ constexpr ΠΈ const Π½Π°Π±Π»ΡΠ΄Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° β ΡΠ»Π΅Π½ ΠΊΠ»Π°ΡΡΠ°.
ΠΠΎΠ³Π΄Π° Π² ΡΠ²Π΅ΡΠ»ΠΎΠΌ Π±ΡΠ΄ΡΡΠ΅ΠΌ, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΠΎΡΡΠ°Π½ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΎΡΡΠ°Π½ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ:
Π§ΡΠΎΠ±Ρ Π½Π΅ ΠΏΡΡΠ°ΡΡΡΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ, ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ Π±Π»ΠΎΠΊ-ΡΡ Π΅ΠΌΠ΅, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠΌ:
ΠΠ½Π° ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠ²Π½ΠΎ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΡΠΎ ΠΌΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈ Π²ΡΡΠ΅.
ΠΠ°Π³Π°Π΄ΠΎΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π°:
ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ:
static Π΄Π»Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π°ΡΡ internal linkage. thread_local Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ thread storage duration. ΠΠΎΡΡΠΎΠΌΡ x β ΡΡΠΎ constexpr volatile ΡΠ°Π±Π»ΠΎΠ½ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ thread storage duration ΠΈ internal linkage (constexpr volatile variable template with thread storage duration and internal linkage).
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² C++20
Π C++ 20 Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π²ΠΈΠ΄ linkage β module linkage. external linkage ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ module linkage, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ linkage Π²Π½ΡΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ, Π° Π²ΡΠ΅, ΡΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ external linkage.
ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ consteval ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠ΅ΠΎΠ±ΡΠ°Π·Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅Ρ ΡΠ°ΠΊΠΈΡ ΠΏΠΎΠ½ΡΡΠΈΠΉ, ΠΊΠ°ΠΊ βΠ²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈβ ΠΈ βΠ²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡβ. ΠΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ βΠ½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΡΠΉ ΡΡΡΠ΅ΠΊΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡβ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΠ° consteval Π΄Π°Π½Π° ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΈΠΌΠ΅Π»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
ΠΠΎΠ±Π°Π²ΠΈΠΌ consteval ΠΈ constinit Π² ΡΠ°Π±Π»ΠΈΡΡ:
ΠΠ°ΠΊ ΠΆΠΈΡΡ Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌΠΈ C++ ΠΈ Π½Π΅ ΡΠΎΠΉΡΠΈ Ρ ΡΠΌΠ°
Π ΡΡΠΎΠΌ Π³ΠΎΠ΄Ρ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Π‘++ Russia 2020 Moscow Π²ΡΡΡΡΠΏΡΡ ΡΠ°ΠΌ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ ΡΠ·ΡΠΊΠ° Π‘++ ΠΡΡΡΠ½Π΅ Π‘ΡΡΠ°ΡΡΡΡΡΠΏ ΠΈ ΠΏΡΠ΅Π΄ΡΠ΅Π΄Π°ΡΠ΅Π»Ρ ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ° ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΠΈ Π‘++ ΠΠ΅ΡΠ± Π‘Π°ΡΡΠ΅Ρ! ΠΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡΡΡ ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΠΎ Π±ΠΈΠ»Π΅ΡΡ-Π°Π±ΠΎΠ½Π΅ΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌ 8 ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΌ Π»Π΅ΡΠ½Π΅Π³ΠΎ ΡΠ΅Π·ΠΎΠ½Π°.