ΠΠ»Ρ Π±ΠΈΡΠΎΠ²ΡΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡΡΠ½ΠΎ Π»ΡΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΡΠΉ ΡΠΈΠΏ. ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΠΈΡΠΎΠ²ΡΡ ΠΏΠΎΠ»Π΅ΠΉ, Ρ ΡΠ°Π½ΠΈΠΌΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΡΠΎΠ²ΡΡ ΠΏΠΎΠ»Π΅ΠΉΠ Π±ΠΈΡΠΎΠ²ΡΠΌ ΠΏΠΎΠ»ΡΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ-ΡΠ»Π΅Π½Π°ΠΌ ΠΊΠ»Π°ΡΡΠ°:
void File::write() {
modified = 1;
// ...
}
void File::close() {
if (modified)
// ... ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅
}
ΠΠ»Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΡΠΎΠ²ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π±ΠΈΡΠ°ΠΌΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΠ±ΠΈΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 4.8):
File &File::open(File::modes m) {
mode |= READ; // ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±ΠΈΡ READ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
// Π΄ΡΡΠ³Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°
if (m & WRITE) // Π΅ΡΠ»ΠΈ ΠΎΡΠΊΡΡΡΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ
// ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π° Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ
return *this;
}
ΠΠ»Π°ΡΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠ΅ ΡΠ»Π΅Π½Ρ Π±ΠΈΡΠΎΠ²ΡΡ ΠΏΠΎΠ»Π΅ΠΉ, ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ-ΡΠ»Π΅Π½ΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π±ΠΈΡΠΎΠ²ΡΡ ΠΏΠΎΠ»Π΅ΠΉ:
inline bool File::isRead() const { return mode & READ; }
inline void File::setWrite() { mode |= WRITE; }
19.8.2. Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ volatile
Π‘ΠΌΡΡΠ» ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° volatile ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΡΠ½Π΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ΅ Π½Π° Π½ΠΎΠ²ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ volatile, ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»ΡΠ²Π°ΡΡ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ, Π·Π°ΡΠ°ΡΡΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄Π°Π½Π½ΡΡ , Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, Π½Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠ³Π»Π° Π±Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ. Π’Π°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ volatile, ΡΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, Π½Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΡΠΌΠΈ ΠΈΠ»ΠΈ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ. ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ volatile β ΡΡΠΎ ΠΏΡΠΈΠΊΠ°Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ volatile ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ const, Ρ.Π΅. ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΈΠΏΠ°:
volatile int display_register; // Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ int ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ
volatile Task *curr_task; // curr_task ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ volatile
volatile int iax[max_size]; // ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² iax volatile volatile
Screen bitmapBuf; // ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅Π½ bitmapBuf volatile
ΠΠ΅ΠΆΠ΄Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° const ΠΈ volatile Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·ΠΈ. Π’ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ const, ΠΈ volatile, ΡΠΎΠ³Π΄Π° Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ ΠΎΠ±Π° ΠΊΠ°ΡΠ΅ΡΡΠ²Π°.
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ, Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ (volatile). Π’ΠΎΠ»ΡΠΊΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ (volatile) ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ.
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ const ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 2.4.2. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ volatile. ΠΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ.
volatile int v; // v - Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° int
int *volatile vip; // vip - Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΈΠΏ int
volatile int *ivp; // ivp - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΡΠΈΠΏ int
// vivp - Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ
// ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° int
volatile int *volatile vivp;
int *ip = &v; // ΠΎΡΠΈΠ±ΠΊΠ°: Π½ΡΠΆΠ΅Π½ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° volatile
*ivp = &v; // ok: ivp - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° volatile
vivp = &v; // ok: vivp - volatile ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° volatile
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌ, Π°Π΄ΡΠ΅Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ (ΠΈΠ»ΠΈ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΡΠΈΠΏ) ΡΠΎΠ»ΡΠΊΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠΌΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ. ΠΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΡΡΠ»ΠΊΠΈ.
Π‘ΠΈΠ½ΡΠ΅Π·ΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ ΠΊ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌΠΈ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅: Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ ΡΠΈΠ½ΡΠ΅Π·ΠΈΡΡΠ΅ΠΌΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ, ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ. Π‘ΠΈΠ½ΡΠ΅Π·ΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΠΈΠΏΠ°ΠΌΠΈ ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΊΠ»Π°ΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠΉ ΡΡΡΠ»ΠΊΠΈ.
ΠΡΠ»ΠΈ ΠΊΠ»Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² (ΠΈΠ»ΠΈ ΠΈΠ·) Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄, Π² Π½Π΅ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΡΠ²ΠΈΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΡΡΠ»ΠΊΠΈ const ΠΈ volatile, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΡΠΈΠΏΠ° Foo:
class Foo {
public:
Foo(const volatile Foo&); // ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ° volatile
// ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° volatile ΠΎΠ±ΡΡΠ½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ
Foo& operator=(volatile const Foo&);
// ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° volatile ΠΎΠ±ΡΠ΅ΠΊΡΡ volatile
Foo& operator=(volatile const Foo&) volatile;
// ΠΎΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΊΠ»Π°ΡΡΠ° Foo
};
Π₯ΠΎΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² volatile Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π·ΠΎΠ½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ: ΠΈΠΌΠ΅Π΅Ρ Π»ΠΈ ΡΠΌΡΡΠ» ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ volatile? ΠΡΠ²Π΅Ρ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
19.8.3. ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ: extern "C"
ΠΠ½ΠΎΠ³Π΄Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π‘++ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΡΠΎ ΡΠ·ΡΠΊ Π‘. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π»ΡΠ±ΠΎΠΌΡ ΠΈΠΌΠ΅Π½ΠΈ, ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ. ΠΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΡΠ·ΡΠΊΠ° Π‘++. ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ΄. Π§ΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ·ΡΠΊ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅, ΠΎΡΠ»ΠΈΡΠ½ΠΎΠΌ ΠΎΡ Π‘++, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ (linkage directive).
ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΊΠΎΠ΄Π° Π‘++ Ρ ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π½Π° Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ·ΡΠΊ Π‘, ΡΡΠ΅Π±ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠΌΡ Ρ Π²Π°ΡΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Π‘++.
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅, ΠΎΡΠ»ΠΈΡΠ½ΠΎΠΌ ΠΎΡ Π‘++ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² Π΄Π²ΡΡ ΡΠΎΡΠΌΠ°Ρ : ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠΉ ΠΈ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ. ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ·ΡΠΊΠ° Π‘, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ cstdlib:
// Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ
// ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π‘++ <cstring>
// ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ
extern "Π‘" size_t strlen(const char *);
// ΡΠΎΡΡΠ°Π²Π½Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ
extern "Π‘" {
int strcmp(const char*, const char*);
char *strcat(char*, const char*);
}
ΠΠ΅ΡΠ²Π°Ρ ΡΠΎΡΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° extern, ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΌ Π»ΠΈΡΠ΅ΡΠ°Π»ΠΎΠΌ ΠΈ "ΠΎΠ±ΡΡΠ½ΡΠΌ" ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠΉ Π»ΠΈΡΠ΅ΡΠ°Π» ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ·ΡΠΊ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°ΠΏΠΈΡΠ°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎΠ±ΡΠ·Π°Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° Π‘. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΈ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ extern "Ada", extern "FORTRAN" ΠΈ Ρ.Π΄.
ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈΠ’Π° ΠΆΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΊ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ ΠΏΠΎΡΠ»Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. ΠΡΠΈ ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ ΡΠ»ΡΠΆΠ°Ρ Π΄Π»Ρ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. ΠΡΠΈ ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ, Π° ΠΈΠΌΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΡ Π² ΠΈΡ ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ , Π²ΠΈΠ΄ΠΈΠΌΡ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ»ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π²Π½Π΅ ΡΠΈΠ³ΡΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ.
Π‘ΠΎΡΡΠ°Π²Π½Π°Ρ ΡΠΎΡΠΌΠ° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΊΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°ΠΉΠ»Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ cstring ΡΠ·ΡΠΊΠ° Π‘++ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
// ΡΠΎΡΡΠ°Π²Π½Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ
extern "Π‘" {
#include <string.h> // ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ·ΡΠΊΠ° Π‘, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ
// Π² ΡΡΠΈΠ»Π΅ Π‘