#include <string.h> // ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ·ΡΠΊΠ° Π‘, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ
// Π² ΡΡΠΈΠ»Π΅ Π‘
}
ΠΠΎΠ³Π΄Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° #include Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π° Π² ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, Π²ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΡΠ°ΠΉΠ»Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π±ΡΠ΄ΡΡ Π²ΠΎΡΠΏΡΠΈΠ½ΡΡΡ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° ΡΠ·ΡΠΊΠ΅, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΡ, Ρ.Π΅. Π΅ΡΠ»ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, Π½Π° Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ.
Π€ΡΠ½ΠΊΡΠΈΠΈ, ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΎΠΌ Π‘++ ΠΎΡ ΡΠ·ΡΠΊΠ° Π‘, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ·ΡΠΊΠ° Π‘, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ·ΡΠΊΠ° Π‘++.
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π΅ extern "Π‘"Π―Π·ΡΠΊ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°ΠΏΠΈΡΠ°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ Π΅Π΅ ΡΠΈΠΏΠ°. Π§ΡΠΎΠ±Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, ΡΡΠΎ ΠΈ Ρ ΡΠ°ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ:
// pf ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π‘, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ void ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ int
extern "Π‘" void (*pf) (int);
ΠΠΎΠ³Π΄Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ pf ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ Π‘.
Π’ΠΈΠΏ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π‘ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠΈΠΏΠΎΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π‘++. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π‘ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ (ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π‘++ (ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ). ΠΠ°ΠΊ ΠΈ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΡΠΈΠΏΠΎΠ², ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Ρ Π΄ΡΡΠ³ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅:
void (*pf1)(int); // ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π‘++
extern "Π‘" void (*pf2)(int); // ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π‘
pf1 = pf2; // ΠΎΡΠΈΠ±ΠΊΠ°: pf1 ΠΈ pf2 ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠΈΠΏΡ
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π‘++ ΠΌΠΎΠ³ΡΡ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²ΡΡΠ΅, Ρ ΠΎΡΡ, ΡΡΡΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΠΎΠ½ΠΎ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ.
ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΠΌΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΠΊ Π»ΡΠ±ΡΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌ Π½Π° Π½Π΅Π΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΠΊΠ°ΠΊ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.
// f1() - ΡΡΠ½ΠΊΡΠΈΡ Π‘, Π΅Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π‘
extern "Π‘" void f1(void(*)(int));
ΠΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ²ΡΠ΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ f1() ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΠ·ΡΠΊΠ° Π‘, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ½Π° ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° int. ΠΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΊ ΡΠ°ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ f1(), ΡΠ°ΠΊ ΠΈ ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π½Π΅Π΅. ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ f1(), Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π‘ ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π½Π΅Π΅.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ, Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π‘++ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π‘ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 2.5.1):
// FC - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π‘
extern "Π‘" typedef void FC(int);
// f2 - ΡΡΠ½ΠΊΡΠΈΡ Π‘++, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π‘
void f2(FC *);
ΠΠΊΡΠΏΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘++, Π² Π΄ΡΡΠ³ΠΎΠΉ ΡΠ·ΡΠΊΠΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘++, ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅.
// ΡΡΠ½ΠΊΡΠΈΡ calc() ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘
extern "Π‘" double calc(double dparm) { /* ... */ }
ΠΠΎΠ΄, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΡΠ·ΡΠΊΡ.
Π‘Π»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠ½ΠΊΡΠΈΡΡ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ² Π·Π°ΡΠ°ΡΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΡΠΈ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° Π½Π΅Π»ΡΠ·Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π‘++ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π‘ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΡΡ ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°Ρ , Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠ°Ρ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ .
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΉΠ» ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ ΠΈΠ»ΠΈ Π‘++, ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘++ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΈΠΌΡ __cplusplus (Π΄Π²Π° ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡ). ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π° Π‘++ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ»ΠΎΠ²Π½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π‘++:
#ifdef __cplusplus
// ok: ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² Π‘++
extern "Π‘"
#endif
int strcmp(const char*, const char*);
ΠΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°. ΠΡΠ»ΠΈ ΡΠ·ΡΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°, Π²Π΅ΡΠΎΡΡΠ½Π΅ΠΉ Π²ΡΠ΅Π³ΠΎ, Π²ΡΠΏΠΎΠ»Π½ΠΈΡ Π΅Π΅.
Π―Π·ΡΠΊ Π‘ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΡΠ·ΡΠΊΠ° Π‘ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ Π² Π½Π°Π±ΠΎΡΠ΅ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ:
// ΠΎΡΠΈΠ±ΠΊΠ°: Π² Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π΅ extern "Π‘" ΡΠΊΠ°Π·Π°Π½Ρ Π΄Π²Π΅ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
extern "Π‘" void print(const char*);
extern "Π‘" void print(int);
ΠΡΠ»ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ Π² Π½Π°Π±ΠΎΡΠ΅ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΠ·ΡΠΊΠ° Π‘, Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π‘++:
class SmallInt { /* ... */ };
class BigNum { /* ... */ };
// ΡΡΠ½ΠΊΡΠΈΡ Π‘ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π‘ ΠΈ Π‘++
// Π²Π΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π‘++, ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ°ΡΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ
// Π²ΡΠ·Π²Π°Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘++
extern "Π‘" double calc(double);
extern SmallInt calc(const SmallInt&);
extern BigNum calc(const BigNum&);
ΠΠ΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ calc() Π΄Π»Ρ ΡΠ·ΡΠΊΠ° Π‘ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° ΠΊΠ°ΠΊ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘, ΡΠ°ΠΊ ΠΈ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘++. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° ΠΊΠ»Π°ΡΡΠ° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘++, ΠΏΡΠΈΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π° 19.8.3Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 19.26. ΠΠ±ΡΡΡΠ½ΠΈΡΠ΅ ΡΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠΊΠ°ΠΆΠΈΡΠ΅, Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ Π»ΠΈ ΠΎΠ½ΠΈ:
extern "Π‘" int compute(int *, int);
extern "Π‘" double compute(double *, double);
Π Π΅Π·ΡΠΌΠ΅
Π―Π·ΡΠΊ Π‘++ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ΅Π΄ΡΡΠ², ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ΄Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²Π·ΡΡΡ ΠΏΠΎΠ΄ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ (Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΈΠ»ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ) Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ operator new() ΠΈ operator delete(). ΠΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ new ΠΈ delete Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π²Π΅ΡΡΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΡΡΠ½ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ² Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Run-Time Type Identification β RTTI) ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΡΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ·ΡΠΊΠ°. RTTI ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π»Π°Π΄Π°ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ; ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ°Ρ Π±Π΅Π· Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π°, Π½ΠΎ ΠΎΠ½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΠΈΠΏΡ.
ΠΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π½ ΠΊΠ»Π°ΡΡΠ° Π² ΡΠΎΡΡΠ°Π² Π΅Π³ΠΎ ΡΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°ΠΊΠΆΠ΅ Π²Ρ ΠΎΠ΄ΠΈΡΡ ΡΠΎΡ ΠΊΠ»Π°ΡΡ, Π½Π° ΡΠ»Π΅Π½ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π½ ΠΊΠ»Π°ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½ Ρ ΡΠ»Π΅Π½ΠΎΠΌ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π½ ΠΊΠ»Π°ΡΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΎ ΡΠ»Π΅Π½Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΠ΄Π΅Ρ ΡΠ΅ΡΡ.
Π ΡΠ·ΡΠΊΠ΅ Π‘++ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΎΡΡΠ°Π²Π½ΡΡ ΡΠΈΠΏΠΎΠ².
β’ ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. Π’Π°ΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ Π·Π°ΡΠ°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
β’ ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ β ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π²ΠΈΠ΄ ΠΊΠ»Π°ΡΡΠ°, ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅-ΡΠ»Π΅Π½Ρ. Π Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ -ΡΠ»Π΅Π½ΠΎΠ². ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π²Ρ ΠΎΠ΄ΡΡ Π² ΡΠΎΡΡΠ°Π² Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
β’ ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π² ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ΅ ΡΠ»Π΅Π½Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² Π΅Π³ΠΎ ΡΠ΅Π»Π΅. ΠΠ»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅-ΡΠ»Π΅Π½Ρ.
Π―Π·ΡΠΊ Π‘++ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π΄ΡΡΠ², ΡΡ ΡΠ΄ΡΠ°ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. Π‘ΡΠ΄Π° ΠΎΡΠ½ΠΎΡΡΡΡΡ Π±ΠΈΡΠΎΠ²ΡΠ΅ ΠΏΠΎΠ»Ρ, ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ volatile, ΡΠΏΡΠΎΡΠ°ΡΡΠΈΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ, ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, ΡΠΏΡΠΎΡΠ°ΡΡΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ .
Π’Π΅ΡΠΌΠΈΠ½Ρ
ΠΠ½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ (anonymous union). ΠΠ΅Π·ΡΠΌΡΠ½Π½ΠΎΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π§Π»Π΅Π½Ρ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠ»Π΅Π½Π°ΠΌΠΈ ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ-ΡΠ»Π΅Π½ΠΎΠ², Π½ΠΈ Π·Π°ΠΊΡΡΡΡΡ ΠΈΠ»ΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΡ ΡΠ»Π΅Π½ΠΎΠ².