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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ. ИзданиС 3-Π΅, исправлСнноС». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 52

Автор Π‘Ρ€Π°ΠΉΠ°Π½ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½

void free(void *Π°Ρ€) {

 Header *bp, *p;


 bp = (Header *)ap -1; /* ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π±Π»ΠΎΠΊΠ° */

 for (p = freep; !(bp β€Ί p && bp s.ptr); p = p-β€Ίs.ptr)

  if (p β€Ί= p-β€Ίs.ptr && (bp β€Ί p || bp s.ptr)) break; /* освобоТдаСм Π±Π»ΠΎΠΊ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ */

 if (bp + bp-β€Ίs.size - p-β€Ίs.ptr) { /* ΡΠ»ΠΈΡ‚ΡŒ с Π²Π΅Ρ€Ρ…Π½ΠΈΠΌ */

  bp-β€Ίs.size += p-β€Ίs.ptr-β€Ίs.size; /* сосСдом */

  bp-β€Ίs.ptr = p-β€Ίs.ptr-β€Ίs.ptr;

 } else bp-β€Ίs.ptr = p-β€Ίs.ptr;

 if (p + p-β€Ίs.size == bp) { /* ΡΠ»ΠΈΡ‚ΡŒ с Π½ΠΈΠΆΠ½ΠΈΠΌ сосСдом */

  p-β€Ίs.size += bp-β€Ίs.size;

  p-β€Ίs.ptr = bp-β€Ίs.ptr;

 } else p-β€Ίs.ptr = bp;

 freep = p;

}

Π₯отя Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎ своСй сути - машинно-зависимая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ привСдСнная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ машинная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ упрятана Π² ΠΎΡ‡Π΅Π½ΡŒ малСнькой Π΅Π΅ части. Π§Ρ‚ΠΎ касаСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ выравнивания, Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ typedef ΠΈ union (прСдполагаСтся, Ρ‡Ρ‚ΠΎ sbrk Π΄Π°Π΅Ρ‚ подходящий Π² смыслС выравнивания ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ). ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ привСдСния Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ явными прСобразования Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с ΠΏΠ»ΠΎΡ…ΠΎ спроСктированным интСрфСйсом систСмы. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ наши рассуТдСния касались распрСдСлСния памяти, этот ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ситуациях.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 8.6. Бтандартная функция calloc(n, size) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° n элСмСнтов памяти Ρ€Π°Π·ΠΌΠ΅Ρ€Π° size, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… нулями. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ свой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ calloc, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ malloc ΠΈΠ»ΠΈ модифицируя послСднюю.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 8.7. Ѐункция malloc допускаСт любой Ρ€Π°Π·ΠΌΠ΅Ρ€, Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ провСряя Π΅Π³ΠΎ Π½Π° ΠΏΡ€Π°Π²Π΄ΠΎΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅: free ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ освобоТдаСмого Π±Π»ΠΎΠΊΠ° - ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ. Π£ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΡƒΠΉΡ‚Π΅ эти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ошибки.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 8.8. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ bfree(p, n), ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ p, состоящий ΠΈΠ· n символов, ΠΏΡƒΡ‚Π΅ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΅Π³ΠΎ Π² список свободной памяти, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ функциями malloc ΠΈ free. C ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ bfree ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² любоС врСмя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² список свободной памяти статичСский ΠΈΠ»ΠΈ внСшний массив.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ A. Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΎΠ΅ руководство

A1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π”Π°Π½Π½ΠΎΠ΅ руководство описываСт язык программирования Π‘ΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ 31 октября 1989 Π³. Π² соотвСтствии с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΌ Π² ANSI Π² качСствС АмСриканского Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ стандарта для ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм: Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ, X3.159-1989 ("American National Standard for Information Systems - Programming Language C, X3.159-1989"). Π­Ρ‚ΠΎ описаниС - лишь ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ³ΠΎ стандарта, Π° Π½Π΅ сам стандарт, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΡ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π·Π°Π±ΠΎΡ‚ΠΈΠ»ΠΈΡΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ руководством ΠΏΠΎ языку.

Настоящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² основном слСдуСт ΠΎΠ±Ρ‰Π΅ΠΉ схСмС описания, принятой Π² стандартС (публикация ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°Π»Π°ΡΡŒ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ·Π΄Π°Π½ΠΈΠΈ этой ΠΊΠ½ΠΈΠ³ΠΈ), ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΏΠ»Π°Π½Π΅ Π΅ΡΡ‚ΡŒ различия. Если Π½Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ Π² названиях Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΈ отсутствия Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ лСксСм ΠΈ прСпроцСссора, Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° языка здСсь ΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° Π² стандартС эквивалСнтны.

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

A2. БоглашСния о лСксикС

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

A2.1. ЛСксСмы (tokens) 

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡˆΠ΅ΡΡ‚ΡŒ классов лСксСм (ΠΈΠ»ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²): ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слона, константы, строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ. ΠŸΡ€ΠΎΠ±Π΅Π»Ρ‹, Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ табуляции, Π½ΠΎΠ²Ρ‹Π΅ строки, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ страницы ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ (ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ‰Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ символы-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ) Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ компилятором Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ лСксСм ΠΈ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ трансляции влияниС Π½Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚. Π›ΡŽΠ±ΠΎΠΉ ΠΈΠ· символов-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ годится, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° сосСдниС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΠΈ константы.

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

A2.2. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ /* ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Π° символы */ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ Π΅Π³ΠΎ. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ нСльзя Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π°, ΠΈΡ… нСльзя ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ строк ΠΈΠ»ΠΈ тСкстовых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ².

A2.3. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ - это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠΊΠ² ΠΈ Ρ†ΠΈΡ„Ρ€. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ символом Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π±ΡƒΠΊΠ²Π°; Π·Π½Π°ΠΊ подчСркивания _ считаСтся Π±ΡƒΠΊΠ²ΠΎΠΉ. Π‘ΡƒΠΊΠ²Ρ‹ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистров Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ; для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 31 символ; Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях принято большСС число Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Ρ… символов. К Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ относятся ΠΈΠΌΠ΅Π½Π° макросов ΠΈ всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π°, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Π²Π½Π΅ΡˆΠ½ΠΈΡ… связСй (A11.2). На ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ с внСшними связями ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ большиС ограничСния: ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡˆΠ΅ΡΡ‚ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… символов ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π±ΡƒΠΊΠ²Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистров.

A2.4. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ смыслС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚:

auto

break

char

case

char

const

continue

default

do

double

else

enum

extern

float

for

goto

if

int

long

register

return

short

signed

sizeof

static

struct

switch

typedef

union

unsigned

void

volatile

while

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ слова fortran ΠΈ asm.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова const, signed ΠΈ volatile Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ появились Π² стандартС ANSI; enum ΠΈ void - Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ изданию ΠΊΠ½ΠΈΠ³ΠΈ, Π½ΠΎ ΡƒΠΆΠ΅ использовались; Ρ€Π°Π½Π΅Π΅ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ entry Π½ΠΈΠ³Π΄Π΅ Π½Π΅ использовалось ΠΈ поэтому Π±ΠΎΠ»Π΅Π΅ Π½Π΅ рСзСрвируСтся.

A2.5. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ 

БущСствуСт нСсколько Π²ΠΈΠ΄ΠΎΠ² констант. КаТдая ΠΈΠΌΠ΅Π΅Ρ‚ свой Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…; Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² A4.2.

константа:

    цСлая-константа

    символьная-константа

    константа-с-ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ-Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ

    константа-пСрСчислСниС

A2.5.1. Π¦Π΅Π»Ρ‹Π΅ константы

ЦСлая константа, состоящая ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ†ΠΈΡ„Ρ€, воспринимаСтся ΠΊΠ°ΠΊ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Π°Ρ, Ссли ΠΎΠ½Π° начинаСтся с 0 (Ρ†ΠΈΡ„Ρ€Ρ‹ Π½ΡƒΠ»ΡŒ), ΠΈ ΠΊΠ°ΠΊ дСсятичная Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. Π’ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Π°Ρ константа Π½Π΅ содСрТит Ρ†ΠΈΡ„Ρ€ 8 ΠΈ 9. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€, ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стоят 0x ΠΈΠ»ΠΈ 0X, рассматриваСтся ΠΊΠ°ΠΊ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅. Π’ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π±ΡƒΠΊΠ²Ρ‹ ΠΎΡ‚ a (ΠΈΠ»ΠΈ A) Π΄ΠΎ f (ΠΈΠ»ΠΈ F) co значСниями ΠΎΡ‚ 10 Π΄ΠΎ 15.

ЦСлая константа ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записана с Π±ΡƒΠΊΠ²ΠΎΠΉ-суффиксом u (ΠΈΠ»ΠΈ U) для спСцификации Π΅Π΅ ΠΊΠ°ΠΊ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠΉ константы. Она Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ с Π±ΡƒΠΊΠ²ΠΎΠΉ- суффиксом l (ΠΈΠ»ΠΈ L) для указания, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ long.

Π’ΠΈΠΏ Ρ†Π΅Π»ΠΎΠΉ константы зависит ΠΎΡ‚ Π΅Π΅ Π²ΠΈΠ΄Π°, значСния ΠΈ суффикса (ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… см. A4). Если константа - дСсятичная ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ суффикса, Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ годится для прСдставлСния Π΅Π΅ значСния: int, long int, unsigned long int. Π’ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Π°Ρ ΠΈΠ»ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Π°Ρ константа Π±Π΅Π· суффикса ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ ΠΈΠ· Ρ‚ΠΈΠΏΠΎΠ²: int, unsigned int, long int, unsigned long int. Если константа ΠΈΠΌΠ΅Π΅Ρ‚ суффикс u ΠΈΠ»ΠΈ U, Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ ΠΈΠ· Ρ‚ΠΈΠΏΠΎΠ²: unsigned int, unsigned long int. Если константа ΠΈΠΌΠ΅Π΅Ρ‚ суффикс l ΠΈΠ»ΠΈ L, Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ ΠΈΠ· Ρ‚ΠΈΠΏΠΎΠ²: long int, unsigned long int. Если константа ΠΈΠΌΠ΅Π΅Ρ‚ суффикс ul ΠΈΠ»ΠΈ UL, Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΈΠΏ unsigned long int.