Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 7

Автор ΠΡ€Π½ΠΎΠ»ΡŒΠ΄ Роббинс

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ процСсс Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ своСго сущСствования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ мноТСство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ВсС устанавливаСмыС систСмой Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ (Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, PID ΠΈ Ρ‚.Π΄.) ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ самыми, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠžΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ «запуска Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса» ΠΎΡ‚ Β«Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для запуска» являСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Unix. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ эти Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΈ ΠΈΡ… слоТнСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

1.2.1. ΠšΠ°Π½Π°Π»Ρ‹: сцСплСниС процСссов

Π‘Π΅Π· сомнСния, Π²Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ('|') ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для соСдинСния Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Канал дСйствуСт ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ„Π°ΠΉΠ»Ρƒ: ΠΎΠ΄ΠΈΠ½ процСсс записываСт Π² Π½Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ записи, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс считываСт ΠΈΠ· Π½Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ) Π½Π΅ Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΈΡ… Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ являСтся ΠΊΠ°Π½Π°Π»ΠΎΠΌ, Π° Π½Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ.

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

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΠΊΠ°Π½Π°Π»Π°ΠΌ слуТит ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ для связывания Π·Π°ΠΏΡƒΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ; Π½Π΅ трСбуСтся Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². ΠžΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ ΠΎΠ±Ρ‰Π½ΠΎΡΡ‚ΡŒ ΠΈ простота Ρ€Π°Π±ΠΎΡ‚Ρ‹: Π½ΠΈΠΊΠ°ΠΊΠΈΡ… особых случаСв для ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

1.3. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π‘ ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π‘

Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π»Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π‘ Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ Π‘Ρ€Π°ΠΉΠ°Π½Π° ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½Π° ΠΈ ДСнниса Π ΠΈΡ‡ΠΈ Β«Π―Π·Ρ‹ΠΊ программирования Π‘Β» (Brian Kernighan & Dennis Ritchie, The Π‘ Programming Language). Π­Ρ‚Π° ΠΊΠ½ΠΈΠ³Π° описала Π‘, ΠΊΠ°ΠΊ ΠΎΠ½ сущСствовал для Unix ΠΈ Π½Π° систСмах, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π³ΠΎ пСрСнСсли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ Bell Labs. На протяТСнии Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Β«ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π‘Β», хотя ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ являСтся Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Β«Π‘ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½Π° ΠΈ Π ΠΈΡ‡ΠΈΒ» (Β«K&R Π‘Β»), ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ Π΄Π²ΡƒΡ… Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠ½ΠΈΠ³ΠΈ. (ДСннис Π ΠΈΡ‡ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» Π‘.)

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ ISO Π‘ 1990 Π³.[17] Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π» опрСдСлСния языка, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘ (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ printf() ΠΈ fopen()). ΠšΠΎΠΌΠΈΡ‚Π΅Ρ‚ ΠΏΠΎ стандартам Π‘ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π» Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ стандартизации ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Π» ввСдСния Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй, с ΠΎΠ΄Π½ΠΈΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ (ΠΈ нСсколькими Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ). НаиболСС Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка Π±Ρ‹Π»ΠΎ использованиС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, заимствованных ΠΎΡ‚ Π‘++.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ языки программирования Π‘, C++ ΠΈ Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для объявлСний ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ описываСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ число ΠΈ Ρ‚ΠΈΠΏ Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π‘ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°ΠΌΠΈ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

ОбъявлСниС

extern int myfunc(struct my_struct *a,

 struct my_struct *b, double c, int d);

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

int myfunc(struct my_struct *a,

 struct my_struct *b, double c, int d) {

 ...

}

...

struct my_struct s, t;

int j;

...

/* Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π³Π΄Π΅-Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС: */

j = my_func(&s, &t, 3.1415, 42);

Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Но рассмотритС ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²:

j = my_func(-1, -2, 0);

/* ΠžΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ число ΠΈ Ρ‚ΠΈΠΏΡ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² */

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ сразу ΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ этот Π²Ρ‹Π·ΠΎΠ² ΠΊΠ°ΠΊ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ. Однако, Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ Π‘ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±Π΅Π· указания списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:

extern int myfunc();

/* Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ int, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ нСизвСстны */

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅Π»ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° int ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, ΠΈ Ссли функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ int, Π΅Π³ΠΎ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ:

myfunc(a, b, с, d); /* Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ int*/

struct my_struct *Π°, *b;

double с;

/* ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½Π΅Ρ‚ объявлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° d*/

{

 ...

}

РассмотритС снова Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: 'j = my_func(-1, -2 , 0);'. Π’ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ Π‘ Ρƒ компилятора Π½Π΅Ρ‚ возмоТности ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ (ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ, ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ) ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ my_func() ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ приводят ΠΊ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ устранимым ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния (Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ ошибки сСгмСнтации, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ), ΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π°ΠΊΠΈΠΌΠΈ Π²Π΅Ρ‰Π°ΠΌΠΈ Π±Ρ‹Π»Π° создана ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Unix lint.

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

Для Π‘ стандарта 1990 Π³. ΠΊΠΎΠ΄, написанный Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС, являСтся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ°ΠΊ для объявлСний, Ρ‚Π°ΠΊ ΠΈ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ строк ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ компилятора, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎ стандарту. Новый ΠΊΠΎΠ΄, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ написан с ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈΠ·-Π·Π° ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹Ρ… возмоТностСй ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ошибок Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компилирования.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ Π‘ 1999 Π³.[18] ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π΄ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ объявлСния ΠΈ опрСдСлСния Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС. Однако, ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ «нСявного intΒ» Π±Ρ‹Π»ΠΎ ΡƒΠ±Ρ€Π°Π½ΠΎ; Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ, Π° всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π·Ρ‹Π²Π°Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π½Π΅ Π±Ρ‹Π»Π° Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ объявлСна, ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π‘ создал Π±Ρ‹ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ нСявноС объявлСниС с Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ int. Π‘ стандарта 1999 Π³. Π΄Π΅Π»Π°Π» Ρ‚ΠΎ ΠΆΠ΅ самоС, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠ², Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ…. Π‘ стандарта 1999 Π³. Π½Π΅ прСдоставляСт большС возмоТности «автоматичСского объявлСния».

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌΠΈ дополнСниями Π² стандартС Π‘ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово const, Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ· Π‘++, ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово volatile, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚. Для ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π² этой ΠΊΠ½ΠΈΠ³Π΅, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠΉ Π²Π΅Ρ‰ΡŒΡŽ являСтся ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… синтаксисов объявлСний ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

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

Π₯отя стандарт Π‘ 1999 Π³. добавляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΠΈ возмоТности, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² вСрсии 1990 Π³., ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π° 1990 Π³, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ компиляторы C99 Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠΊΠ° Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌΠΈ. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ, это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния: ΠΊΠΎΠ΄ C89 Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ использовании компилятора C99, Π° Π½ΠΎΠ²Ρ‹Π΅ возмоТности C99 Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ нашС обсуТдСниС ΠΈΠ»ΠΈ использованиС Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… API Linux/Unix.

1.4. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ GNU Π»ΡƒΡ‡ΡˆΠ΅

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ GNU ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ GNU?[19] Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС GNU Β«Π»ΡƒΡ‡ΡˆΠ΅Β» ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ (ΠΏΠ»Π°Ρ‚Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ бСсплатным) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ обСспСчСниСм? НаиболСС ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ являСтся общСдоступная лицСнзия (General Public License β€” GPL), которая описываСт условия распространСния для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния GNU. Но это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ люди говорят: Β«Π”Π°ΠΉΡ‚Π΅ GNU-Π²Π΅Ρ€ΡΠΈΡŽ xyz, ΠΎΠ½Π° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅Β». ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС GNU Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ устойчиво, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‡Π΅ΠΌ Π² стандартных вСрсиях Unix. Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ этого явлСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ рассмотрим Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ проСктирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния GNU.

Β«Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ кодирования GNUΒ» (GNU Coding Standards) ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ созданиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° GNU. Они ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ряд Ρ‚Π΅ΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ GNU Coding Standards ΠΏΠΎ адрСсу http://www.gnu.org/prep/standards.html. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π² ΠΎΠ½Π»Π°ΠΉΠ½-вСрсии ссылки Π½Π° исходныС Ρ„Π°ΠΉΠ»Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ….

Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ описываСм лишь Ρ‚Π΅ части GNU Coding Standards, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ относятся ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

1.4.1. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π“Π»Π°Π²Π° 3 GNU Coding Standards содСрТит ΠΎΠ±Ρ‰ΠΈΠ΅ совСты ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ проСктирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π§Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ (со стандартами ΠΈ с Unix), язык, использованиС нСстандартных возмоТностСй Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (ΠΎΠ΄Π½ΠΈΠΌ словом, Β«Π½ΠΈΡ‡Π΅Π³ΠΎΒ»), ΠΈ смысл «пСрСносимости».

Π’Π°ΠΆΠ½ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ являСтся ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ со стандартом Π‘ ΠΈ POSIX, Π° Ρ‚Π°ΠΊΠΆΠ΅, Π² мСньшСй стСпСни, с Berkley Unix. Но ΠΎΠ½Π° Π½Π΅ ΠΏΡ€Π΅ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚. ΠžΠ±Ρ‰Π΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ являСтся прСдоставлСниС всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… возмоТностСй Ρ‡Π΅Ρ€Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для прСдоставлСния Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° ISO ΠΈΠ»ΠΈ POSIX.

ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ языком для написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния GNU являСтся Π‘, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ доступный язык. Π’ ΠΌΠΈΡ€Π΅ Unix стандарт Π‘ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Ρ‹Ρ‡Π΅Π½, Π½ΠΎ Ссли для вас Π½Π΅ прСдставляСт Ρ‚Ρ€ΡƒΠ΄Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π‘, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это. Π₯отя стандарты кодирования ΠΎΡ‚Π΄Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ Π‘ ΠΏΠ΅Ρ€Π΅Π΄ Π‘++, C++ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΠΆΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠ±Ρ‹Ρ‡Π΅Π½. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° GNU, написанного Π½Π° Π‘++, являСтся groff (GNU troff). Наш ΠΎΠΏΡ‹Ρ‚ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ с GCC, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ Π‘++, установка groff Π½Π΅ прСдставляСт слоТности.