Π Π°Π·Π½ΠΎΠ΅

C unsigned long: C — Data Types — Tutorialspoint

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ unsigned long ΠΈ unsigned long long?

Π― ΠΎΠΆΠΈΠ΄Π°Π», Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ. Но ΠΎΠ±Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ 8 Π±Π°ΠΉΡ‚.

#include <iostream>
using namespace std;
int main()
{
    cout<<"Size of long:"<<sizeof(unsigned long)<<"\n";
    cout<<"Size of Long Long:"<< sizeof(unsigned long long)<<"\n";
}

Output:
Size of long:8
Size of Long Long:8

c++

long-integer

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ


cppcoder Β  Β 

08 ΠΌΠ°Ρ€Ρ‚Π° 2012 Π² 04:40

3 ΠΎΡ‚Π²Π΅Ρ‚Π°


  • Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ unsigned long ΠΈ UINT64

    Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ unsigned long ΠΈ UINT64 ? Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅, Π½ΠΎ я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ UINT64 являСтся : typedef unsigned __int64 UINT64 (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ StdAfx.h)

  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с unsigned long long

    Π― экспСримСнтировал с ограничСниями unsigned long long Π² C++ ΠΈ столкнулся с нСбольшой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Когда я ΡƒΠΌΠ½ΠΎΠΆΠ°ΡŽ 5 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π½Π° 5 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π²ΠΎΡ‚ Ρ‚Π°ΠΊ: unsigned long long test = 5000000*5000000; пСрСмСнная test ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 18446744072704921600 вмСсто 25000000000000. Насколько я понимаю, unsigned…



10

Π­Ρ‚ΠΎ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ прСдставлСниС Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

unsigned long Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 32 Π±ΠΈΡ‚. unsigned long long Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 64 Π±ΠΈΡ‚. (На самом Π΄Π΅Π»Π΅ трСбования сформулированы Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ.)

Как Π²Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, это согласуСтся с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, Ссли этот Ρ€Π°Π·ΠΌΠ΅Ρ€ составляСт Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 64 Π±ΠΈΡ‚.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ большого значСния (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ). НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ unsigned long long ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ unsigned long , ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ нСявно, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Аналогично, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ unsigned long long Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰Π΅ΠΉ unsigned long (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ функция Π½Π΅ являСтся Π²Π°Ρ€ΠΈΠ°Ρ‚ΠΈΠ²Π½ΠΎΠΉ, ΠΊΠ°ΠΊ printf ; Ρ‚ΠΎΠ³Π΄Π° трСбуСтся явноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅).

Но ΠΎΠ΄ΠΈΠ½ случай, ΠΊΠΎΠ³Π΄Π° это ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, — это ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ . Π’ΠΈΠΏΡ‹ unsigned long* ΠΈ unsigned long long* Π½Π΅ просто Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹, ΠΎΠ½ΠΈ Π½Π΅ совмСстимы с Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ нСявного прСобразования ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. НапримСр, эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°:

int main()
{   
    unsigned long*      ulp  = 0;
    unsigned long long* ullp = 0;
    ulp = ullp; // illegal
}

ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅, Когда я ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ g++:

c.cpp: In function β€˜int main()’:
c.cpp:5:11: error: cannot convert β€˜long long unsigned int*’ to β€˜long unsigned int*’ in assignment

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅: стандарт C++ Π½Π΅ добавлял Ρ‚ΠΈΠΏΡ‹ long long ΠΈ unsigned long long Π΄ΠΎ 2011 Π³ΠΎΠ΄Π°. C Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΈΡ… со стандартом 1999 Π³ΠΎΠ΄Π°, ΠΈ это Π½Π΅ Ρ€Π΅Π΄ΠΊΠΎΡΡ‚ΡŒ для компиляторов pre-C++2011 (ΠΈ pre-C99), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² качСствС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


Keith Thompson Β  Β 

08 ΠΌΠ°Ρ€Ρ‚Π° 2012 Π² 04:44


ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


Vijay Agrawal Β  Β 

08 ΠΌΠ°Ρ€Ρ‚Π° 2012 Π² 04:49



0

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ гласит, Ρ‡Ρ‚ΠΎ long long Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° , Ρ‡Ρ‚ΠΎ ΠΈ long, ΠΈΠ»ΠΈ большС. БоотвСтствСнно для unsigned Ρ‚ΠΈΠΏΠΎΠ², long ΠΈ int .

ЀактичСскиС значСния зависят ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


J.N. Β  Β 

08 ΠΌΠ°Ρ€Ρ‚Π° 2012 Π² 04:44


  • unsigned long long ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ с uint64_t?

    ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ шаблона для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ class my_template_class<uint64_t M>: public my_template_class_base<uint64_t> { …. } class my_template_class<unsigned long long,M>: public my_template_class_base<unsigned long long> { …. } Π­Ρ‚ΠΎ…

  • ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· unsigned long long Π² unsigned int

    Π― Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ поискал Π²ΠΎΠΊΡ€ΡƒΠ³, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° этот вопрос, Π½ΠΎ Π½Π΅ смог Π½Π°ΠΉΡ‚ΠΈ Ρ‡Π΅Ρ‚ΠΊΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°. Π― Π²ΠΈΠ΄Π΅Π» этот ΠΎΡ‚Π²Π΅Ρ‚, Π³Π΄Π΅ ΠΎΠ½ написал Π² качСствС примСчания: ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ для Ρ‚ΠΈΠΏΠΎΠ² Π±Π΅Π· Π·Π½Π°ΠΊΠ°; Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ прСобразования Ρ†Π΅Π»ΠΎΠ³ΠΎ числа со Π·Π½Π°ΠΊΠΎΠΌ ΠΈΠ»ΠΈ Π±Π΅Π· Π·Π½Π°ΠΊΠ° Π² Ρ‚ΠΈΠΏ Π±Π΅Π· Π·Π½Π°ΠΊΠ° Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅…


ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ вопросы:

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ unsigned int 2 Ρ€Π°Π·Π° ΠΈ unsigned long 1 Ρ€Π°Π· Π² систСмах 64 bit?

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ *(unsigned*)d = *(unsigned*)s; d+=4; s+=4; *(unsigned*)d = *(unsigned*)s; d+=4; s+=4; ΠΈ *(unsigned long*)d = *(unsigned long*)s; d+=8; s+=8; Π½Π° 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… систСмах?

Как ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ unsigned long long?

Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ unsigned long long int . Но компилятор Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ error: integer constant is too large for long type . Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½ΠΈΠΆΠ΅ : unsigned long long temp =…

unsigned long long to binary

Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ установлСнныС Π±ΠΈΡ‚Ρ‹ unsigned long long Π² c++, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ провСряСт, установлСн Π»ΠΈ Π±ΠΈΡ‚ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Но моя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я…

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ unsigned long ΠΈ UINT64

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ unsigned long ΠΈ UINT64 ? Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅, Π½ΠΎ я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ UINT64 являСтся : typedef unsigned __int64 UINT64 (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ StdAfx. h)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с unsigned long long

Π― экспСримСнтировал с ограничСниями unsigned long long Π² C++ ΠΈ столкнулся с нСбольшой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Когда я ΡƒΠΌΠ½ΠΎΠΆΠ°ΡŽ 5 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π½Π° 5 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π²ΠΎΡ‚ Ρ‚Π°ΠΊ: unsigned long long test = 5000000*5000000;…

unsigned long long ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ с uint64_t?

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ шаблона для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ class my_template_class<uint64_t M>: public my_template_class_base<uint64_t> { …. } class…

ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· unsigned long long Π² unsigned int

Π― Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ поискал Π²ΠΎΠΊΡ€ΡƒΠ³, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° этот вопрос, Π½ΠΎ Π½Π΅ смог Π½Π°ΠΉΡ‚ΠΈ Ρ‡Π΅Ρ‚ΠΊΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°. Π― Π²ΠΈΠ΄Π΅Π» этот ΠΎΡ‚Π²Π΅Ρ‚, Π³Π΄Π΅ ΠΎΠ½ написал Π² качСствС примСчания: ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ для Ρ‚ΠΈΠΏΠΎΠ² Π±Π΅Π· Π·Π½Π°ΠΊΠ°;…

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ long unsigned int ΠΈ unsigned long int

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π±Π΅Ρ€Π΅Ρ‚ эти Π΄Π²Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ…. long unsigned int a; unsigned long int a;

C++ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ unsigned int ΠΈ unsigned long int

Π― занимаюсь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ C++ Π½Π° Windows с компилятором Visual Studio, Π² частности Visual Studio 2015 Update 3. Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚, связанных с DSP, я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ unsigned int / unsigned long Ρ‚ΠΈΠΏ…

unsigned long long int output Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Ρ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π΅Ρ‚ большС чисСл, Ρ‡Π΅ΠΌ 111111111111111111 (19 Ρ€Π°Π· ΠΏΠΎ 1). хотя unsigned long long int Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎ 18446744073709551615 (19 чисСл), Π½ΠΎ 111111111111111111…

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² | ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C ΠΈ C++

Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° void, основныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ управлСния ситуациСй. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ список ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²:
signed
unsigned
short

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ signed, unsigned, long ΠΈ short ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ цСлочислСнным Ρ‚ΠΈΠΏΠ°ΠΌ. К символам ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ signed ΠΈ unsigned, long ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ Ρ‚ΠΈΠΏΡƒ double. Π’Π°Π±Π»ΠΈΡ†Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ всС допустимыС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ стандарта ANSI Π‘ для 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… вмСстС с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚ΠΈΠΏΠ° Π² Π±ΠΈΡ‚Π°Ρ… ΠΈ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ примСнСния Π² Borland Π‘++.

ВсС допустимыС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² для 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… слов
Π’ΠΈΠΏ Π”Π»ΠΈΠ½Π° Π² Π±ΠΈΡ‚Π°Ρ… Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½
char 8 ΠΎΡ‚-128 Π΄ΠΎ 127
unsigned char 8 ΠΎΡ‚ 0 Π΄ΠΎ 255
signed char 8 ΠΎΡ‚-128 Π΄ΠΎ 127
int 16 ΠΎΡ‚-32768 Π΄ΠΎ 32767
unsigned int 16 ΠΎΡ‚ 0 Π΄ΠΎ 65535
signed int 16 ΠΎΡ‚ -32768 Π΄ΠΎ 32767
short int 16 ΠΎΡ‚ -32768 Π΄ΠΎ 32767
unsigned short int 16 ΠΎΡ‚ 0 Π΄ΠΎ 65535
signed short int 16 ΠΎΡ‚ -32768 Π΄ΠΎ 32767
long int 32 ΠΎΡ‚ -2147483648 Π΄ΠΎ 2147483647
unsigned long int 32 ΠΎΡ‚ 0 Π΄ΠΎ 4294967295
signed long int. 32 ΠΎΡ‚ -2147483648 Π΄ΠΎ 2147483647
float 32 ΠΎΡ‚ 3.4Π΅-38 Π΄ΠΎ 3.4Π΅+38
double 64 ΠΎΡ‚ 1.7Π΅-308 Π΄ΠΎ 1.7e+308
long double 80 ΠΎΡ‚ 3.4Π΅-4932 Π΄ΠΎ 1.1e+4932

Π’Π°Π±Π»ΠΈΡ†Π°Β  содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°Π±Π»ΠΈΡ†Π° ВсС допустимыС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² дпя 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… слов
Π’ΠΈΠΏ Π”Π»ΠΈΠ½Π° Π² Π±ΠΈΡ‚Π°Ρ… Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚-128 Π΄ΠΎ 127
char 8 ΠΎΡ‚ 128 Π΄ΠΎ 127
unsigned char 8 ΠΎΡ‚ 0 Π΄ΠΎ 255
signed char 8 ΠΎΡ‚ -128 Π΄ΠΎ 127
int 32 ΠΎΡ‚ -2147483648 Π΄ΠΎ 2147483647
unsigned int 32 ΠΎΡ‚ 0 Π΄ΠΎ 4294967295
signed int 32 ΠΎΡ‚ -2147483648 Π΄ΠΎ 2147483647
short int 16 ΠΎΡ‚ -32768 Π΄ΠΎ 32767
unsigned short int 16 ΠΎΡ‚ 0 Π΄ΠΎ 65535
signed short int 16 ΠΎΡ‚ -32768 Π΄ΠΎ 32767
long int 32 ΠΎΡ‚ -2147483648 Π΄ΠΎ 2147483647
unsigned long int 32 ΠΎΡ‚ 0 Π΄ΠΎ 4294967295
signed long int 32 ΠΎΡ‚ -2147483648 Π΄ΠΎ 2147483647
float 32 ΠΎΡ‚ 3. 4e-38 Π΄ΠΎ 3.4Π΅+38
double 64 ΠΎΡ‚ 1.7Π΅-308 Π΄ΠΎ 1.7Π΅+308
long double 80 ΠΎΡ‚ 3.4Π΅-4932 Π΄ΠΎ 1.1e+4932

ИспользованиС signed для цСлочислСнных Ρ‚ΠΈΠΏΠΎΠ² являСтся ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ (Π½ΠΎ допустимым), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ объявлСниС цСлочислСнных Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ число.

Π Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ цСлочислСнными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² способС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΡΡ‚Π°Ρ€ΡˆΠ΅Π³ΠΎ Π±ΠΈΡ‚Π°. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Ρ‚ΠΎ компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π·Π½Π°ΠΊ числа. Если Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π±ΠΈΡ‚ Ρ€Π°Π²Π΅Π½ 0, Ρ‚ΠΎ число ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Π° Ссли 1 — ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ простыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ фактичСски всС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ β€”127 Π² Π²ΠΈΠ΄Π΅, слСгка ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΎΡ‚ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, использованиС Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π° являСтся ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹ΠΌ. Π£ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ всС Π±ΠΈΡ‚Ρ‹ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, ΠΈ ΠΊ числу добавляСтся 1. НапримСр, β€”127 Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

1111111110000001

Π—Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ числа Π²Π°ΠΆΠ½Ρ‹ для ΠΌΠ½ΠΎΠ³ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π½ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈΡ… Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ Β«Π±Ρ€Π°Ρ‚ΡŒΡΒ». НапримСр, 32767 выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

01111111 11111111

Если ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚ установлСн Π² 1, Ρ‚ΠΎ число Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ β€”1. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ссли ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ unsigned int, Ρ‚ΠΎ, Ссли ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚ установлСн, число Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ 65535.
Β 

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° C++, Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ | Visual C++ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅ΠΌΡƒ | Π‘Ρ‚Π°Ρ‚ΡŒΠΈ | ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Realcoding.Net

Π§Ρ‚ΠΎ Π±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ C++ сначала создадим простоС консольноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Для
этого запуститС Visual C++. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ‘New’ Π² мСню ‘File’. ΠŸΡ€ΠΎΠ²Π΅Ρ€Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π²
Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»Π΅ ‘New’ Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° Π·Π°ΠΊΠ»Π°Π΄ΠΊΠ° ‘Projects’. Π’ спискС Ρ‚ΠΈΠΏΠΎΠ²
ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ‘Win32 Console Application’. 64

C: ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ — Linux FAQ

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ указатСлями Π½Π° области памяти, хранящиС ΠΈΡ… значСния. Π’ языкС C каТдая пСрСмСнная Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ структуру Π΄Π°Π½Π½Ρ‹Ρ…, хранящихся Π² памяти. Π­Ρ‚Π° информация позволяСт ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, сколько памяти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для хранСния значСния Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ.

Π―Π·Ρ‹ΠΊ C ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ char, int, float ΠΈ double. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹Π΅ с использованиСм слов signed, unsigned ΠΈ long, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² памяти значСния ΠΈΠ· Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ².

Π¦Π΅Π»Ρ‹Π΅ числа

ЦСлочислСнная пСрСмСнная Ρ‚ΠΈΠΏΠ° int позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ числа Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°ΠΉΡ‚Π°Ρ… памяти. ΠŸΡ€ΠΈ присваивании цСлочислСнной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ значСния с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Ρ‚ΠΈΠΏΠ° float ΠΈΠ»ΠΈ double, это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ Π² цСлочислСнноС.

int count = 8;

Π’Π°ΠΊΠΆΠ΅ Π² распоряТСнии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ (unsigned int), ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ (short int),Β  Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ (long int) ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ (long long int) цСлочислСнныС значСния. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ нСобходимости:

  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° short int ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ -32768 Π΄ΠΎ 32768 ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° памяти.
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° unsigned short int ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ 0 Π΄ΠΎ 65535 Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° памяти.
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° int ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ -2147483648 Π΄ΠΎΒ  2147483648 ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° памяти.
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° unsigned int ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ 0 Π΄ΠΎ 4294967295 ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° памяти.
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° long int ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ -2147483648 Π΄ΠΎΒ  2147483648 ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° памяти Π½Π° 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… систСмах ΠΈ значСния ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ -9223372036854775807 Π΄ΠΎ 9223372036854775807 ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ восСмь Π±Π°ΠΉΡ‚ памяти Π½Π° 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… систСмах.
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° unsigned long int ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ 0 Π΄ΠΎ 4294967295 ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° памяти Π½Π° 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… систСмах ΠΈ значСния ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ 0 Π΄ΠΎ 18446744073709551615 ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ восСмь Π±Π°ΠΉΡ‚ памяти Π½Π° 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… систСмах.
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° long long int ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ -9223372036854775807 Π΄ΠΎ 9223372036854775807 ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ восСмь Π±Π°ΠΉΡ‚ памяти Π½Π° Π»ΡŽΠ±Ρ‹Ρ… систСмах.
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° unsigned long long int ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ 0 Π΄ΠΎ 18446744073709551615 ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ восСмь Π±Π°ΠΉΡ‚ памяти Π½Π° Π»ΡŽΠ±Ρ‹Ρ… систСмах.

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… int ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² случаС использования ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… long ΠΈ short. Помимо обозначСния Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (unsigned), сущСствуСт ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (signed), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ объявлСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ эквивалСнтными:

long lightspeed = 299792458;
long int lightspeed = 299792458;
signed long lightspeed = 299792458;
signed long int lightspeed = 299792458;

Числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Ρ‚ΠΈΠΏΠ° float позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ вСщСствСнныС числа Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°ΠΉΡ‚Π°Ρ… памяти.

float pi = 3.14;

По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° float, пСрСмСнная Ρ‚ΠΈΠΏΠ° double Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ вСщСствСнныС числа, Π½ΠΎ эти числа ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ Π½ΠΈΡ… отводится восСмь Π±Π°ΠΉΡ‚ памяти.

double score = 53.92819384;

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, имССтся Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… long double для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с вСщСствСнными числами с ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ.

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹

Бимвольная пСрСмСнная Ρ‚ΠΈΠΏΠ° char позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ символ Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Π°ΠΉΡ‚Π΅ памяти. Π₯отя Π² качСствС значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ устанавливаСтся символ, Π² памяти хранится Π΅Π³ΠΎ цСлочислСнноС прСдставлСниС.

char initial = 'd';

Помимо ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ символьной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ сущСствуСт знаковая (signed char) ΠΈ бСззнаковая (unsigned char) ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ

Π’ языкС C для строк Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ это дСлаСтся Π² Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Python. ВмСсто этого строки прСдставлСны массивами ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….
ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Π±ΡƒΠ΄Π΅Ρ‚ рассказано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π‘Ρ‚Ρ€ΠΎΠΊΠΈΒ».

ЛогичСскиС значСния

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ стандарт языка C99 Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ логичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° bool (ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… значСния true ΠΈ false), ΠΎΠ΄Π½Π°ΠΊΠΎ Π² случаС компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ компилятора Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ошибки.

Новый Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… объявлСн ΠΊΠ°ΠΊ _Bool, хотя Π² случаС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ модуля <stdbool.h> Ρ‚ΠΈΠΏ _Bool Π±ΡƒΠ΄Π΅Ρ‚ эквивалСнтСн Ρ‚ΠΈΠΏΡƒ bool.

  1. #include <stdio.h>

  2. #include <stdbool.h>

  3. Β 

  4. int main()

  5. {

  6. Β  Β  bool run = false;

  7. Β 

  8. Β  Β  if (run == true)

  9. Β  Β  Β  Β  printf(&quot;Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚...\n&quot;);
  10. Β  Β  else

  11. Β  Β  Β  Β  printf(&quot;НС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.\n&quot;);
  12. Β 

  13. Β  Β  return 0;

  14. }

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: для использования Ρ‚ΠΈΠΏΠ° bool ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -std=c99.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Если пСрСмСнная объявлСна Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π›ΡŽΠ±Π°Ρ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° использования Π΅Π΅ ΠΈΠ·Π²Π½Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ сообщСния ΠΎΠ± ошибкС. Вакая пСрСмСнная называСтся локальной.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ· любого Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НапримСр, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Вакая пСрСмСнная инициализируСтся Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ПослС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ сохраняСтся Π² памяти ΠΈ Π½Π΅ измСняСтся Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

БтатичСская пСрСмСнная ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ слова static, Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΏΠ΅Ρ€Π΅Π΄ описаниСм Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

static int age;

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

  1. #include <stdio.h>

  2. Β 

  3. {

  4. Β  Β  int var = 1;

  5. Β  Β  static int svar = 1;

  6. Β 

  7. Β  Β  printf(&quot;var = %d, static = %d\n&quot;, var, svar);
  8. Β  Β  var++;

  9. Β  Β  svar++;

  10. }

  11. Β 

  12. int main()

  13. {

  14. Β  Β  int i;

  15. Β  Β  for (i = 0; i < 5; i++)

  16. Β  Β  {

  17. Β  Β  }

  18. Β 

  19. Β  Β  return 0;

  20. }

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» исходного ΠΊΠΎΠ΄Π°

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

Π―Π·Ρ‹ΠΊ C ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ использованиС Π½Π°Π±ΠΎΡ€Π° Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΈΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

  • auto
  • break
  • case
  • char
  • continue
  • default
  • do
  • double
  • else
  • enum
  • extern
  • float
  • for
  • goto
  • if
  • int
  • long
  • register
  • return
  • short
  • sizeof
  • static
  • struct
  • switch
  • typedef
  • union
  • unsigned
  • void
  • while

ИмСна ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎΠ³ΠΎ символа ΠΈΠ»ΠΈ символа подчСркивания ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ†ΠΈΡ„Ρ€Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

  1. #include <stdio.h>

  2. Β 

  3. int x = 5;

  4. Β 

  5. int main()

  6. {

  7. Β  Β  int y = 8;

  8. Β  Β 

  9. Β  Β  printf(&quot;Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ пСрСмСнная: %i\n&quot;, x);
  10. Β  Β  printf(&quot;Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ пСрСмСнная: %i\n&quot;, y);
  11. Β  Β 

  12. Β  Β  return 0;

  13. }

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» исходного ΠΊΠΎΠ΄Π°

Digital Chip

ВсС Π΄Π°Π½Π½Ρ‹Π΅ Π² языкС Π‘ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ свой Ρ‚ΠΈΠΏ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π² памяти ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ мСсто, Ρ€Π°Π·Π½ΠΎΠ΅ Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ°. Π’ Π‘ΠΈ Π½Π΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΎΠ³ΠΎ закрСплСния количСства памяти Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΎΡ‚Π΄Π°Π½ΠΎ Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ компилятора ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ. НапримСр, пСрСмСнная Ρ‚ΠΈΠΏΠ° int Π² ΠΎΠ΄Π½ΠΎΠΌ компиляторС ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π² памяти 16 Π±ΠΈΡ‚, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ β€” 32 Π±ΠΈΡ‚Π°, Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ β€” 8 Π±ΠΈΡ‚. ВсС опрСдСляСт ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ компилятор. ΠŸΡ€Π°Π²Π΄Π°, всС стрСмятся ΠΊ унивСрсализации, ΠΈ Π² основном Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ компиляторов Ρ‚ΠΈΠΏ int, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 Π±Π°ΠΉΡ‚Π°, Π° Ρ‚ΠΈΠΏ char β€” ΠΎΠ΄ΠΈΠ½.

Π― Π² послСднСС врСмя Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Ρ‚ΡƒΠΏΠΈΠ», Π½Π΅ ΠΌΠΎΠ³ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, сколько Π±Π°ΠΉΡ‚ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΈΠΏ double Π² AVR-GCC. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΡˆΡŒ с цСлочислСнными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Ρ‚ΠΈΠΏΠ° int ΠΈ char, Π° ΠΊ Ρ‚ΠΈΠΏΠ°ΠΌ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ±Π΅Π³Π°Π΅ΡˆΡŒ Π½Π΅ часто, Π² связи с ΠΈΡ… Ρ€Π΅ΡΡƒΡ€ΡΠΎΠ΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅, ΠΎΡΡ‚Π°Π²Π»ΡŽ сСбС здСсь памятку с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ памяти Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… для компилятора AVR-GCC ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ измСнСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… этого Ρ‚ΠΈΠΏΠ°.

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² языкС Π‘ΠΈ для компилятора AVR-GCC

Π’ΠΈΠΏΠ Π°Π·ΠΌΠ΅Ρ€ Π²
Π±Π°ΠΉΡ‚Π°Ρ… (Π±ΠΈΡ‚Π°Ρ…)
Π˜Π½Ρ‚Π΅Ρ€Π²Π°Π» измСнСния
char1 (8)-128 .. 127
unsigned char1 (8)0 . . 255
signed char1 (8)-128 .. 127
int2 (16)-32768 .. 32767
unsigned int2 (16)0 .. 65535
signed int2 (16)-32768 .. 32767
short int2 (16)-32768 .. 32767
unsigned short int2 (16)0 .. 65535
signed short int2 (16)-32768 .. 32767
long int4 (32)-2147483648 .. 2147483647
unsigned long int4 (32)0 .. 4294967295
signed long int4 (32)-2147483648 .. 2147483647
float4 (32)3.4Π•-38 .. 3.4Π•+38
double4 (32)3.4Π•-38 .. 3.4Π•+38
long double10 (80)3.4Π•-4932 .. 3.4Π•+4932

[stextbox id=Β»warningΒ» caption=Β»ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅Β»]РСализация Ρ‚ΠΈΠΏΠ° double Π² AVR-GCC отступаСт ΠΎΡ‚ стандарта. По стандарту double Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 64 Π±ΠΈΡ‚Π°. Π’ AVR-GCC пСрСмСнная этого Ρ‚ΠΈΠΏΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 32 Π±ΠΈΡ‚Π°, ΠΈ соотвСтствСнно, ΠΎΠ½Π° эквивалСнтна ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с Ρ‚ΠΈΠΏΠΎΠΌ float![/stextbox]

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ этому, Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… AVR-GCC Π²Π²Π΅Π΄Π΅Π½ΠΎ нСсколько ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΎΡ‚ стандартных Ρ‚ΠΈΠΏΠΎΠ². Они описаны Π² Ρ„Π°ΠΉΠ»Π΅ stdint.h. Π‘Π΄Π΅Π»Π°Π½ΠΎ это, Π½Π°Π²Π΅Ρ€Π½ΠΎ, для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ наглядности ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (ускорСния ΠΈΡ… написания :)). Π’ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ° соотвСтствия:

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΎΡ‚ стандартных Π² языкС Π‘ΠΈ для компилятора AVR-GCC

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏΠ‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ
int8_tsigned char
uint8_tunsigned char
int16_tsigned int
uint16_tunsigned int
int32_tsigned long int
uint32_tunsigned long int
int64_tsigned long long int
uint64_tunsigned long long int

Π’ΠΈΠΏ Void

Π’ языкС Π‘ΠΈ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ β€” Ρ‚ΠΈΠΏ void. Void ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для указания, Ρ‡Ρ‚ΠΎ функция Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, ΠΈΠ»ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Π½Π΅ примСняСтся для объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, соотвСтствСнно ΠΎΠ½ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ мСста Π² памяти.

5.3. Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π°Β»

5.3.

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π°Β»

ΠžΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ΠΈ , Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ слСдуСт имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ свой адрСс памяти. Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° — Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.
to Β», Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Ρ‚ΠΈΠΏ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ получСния
синтаксис ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этих Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…:

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… T сущСствуСт
сущСствуСт Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π’Β», ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ
Β« Π’ * Β».

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ послСдствия примСнСния этого
ΠΏΡ€Π°Π²ΠΈΠ»Π° для основных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… C ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ вмСстС с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ
объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Π’ΠΈΠΏ Π’

Π Π°Π·ΠΌΠ΅Ρ€ (Π±Π°ΠΉΡ‚Ρ‹)
[]

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° T

Π Π°Π·ΠΌΠ΅Ρ€ (Π±Π°ΠΉΡ‚Ρ‹)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования

Π²Π½ΡƒΡ‚Ρ€ 4 Π²Π½ΡƒΡ‚Ρ€ * 4 Π²Π½ΡƒΡ‚Ρ€ * a, * b, * c;
Ρ†Π΅Π»ΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ° 4 Ρ†Π΅Π»ΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ° * 4 Ρ†Π΅Π»ΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ° * d, * e, * f;
ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ 2 ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ * 4 ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ * g, * h, * i;
unsigned short int 2 unsigned short int * 4 Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ int * j, * k, * l;
Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ int 4 Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ int * 4 Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ int * m, * n, * o;
Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ° 4 Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ° * 4 Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ° * p, * q, * r;
симв. 1 симв. * 4 симв. * S, * t;
символ бСз знака 1 символ бСз знака * 4 символ бСз знака * u, * v;
с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой 4 с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой * 4 с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой * w, * x;
Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ 8 Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ * 4 Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ * y, * z;
Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ 8 Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ * 4 Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ * a1, * a2;

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ указатСлям Π½Π° созданныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, C
позволяСт ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° void * .ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ
этого Ρ‚ΠΈΠΏΠ° Ρ…Ρ€Π°Π½ΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. РСкомСндуСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ
использованиС этого Ρ‚ΠΈΠΏΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

Π Π°Π·ΠΌΠ΅Ρ€ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ всСгда ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ нСзависимо ΠΎΡ‚
Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всС ΠΎΠ½ΠΈ хранят адрСс памяти. Π’ случаС
структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ примСняСтся Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€
ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ опрСдСляСтся структура, Π° Ρ‚Π°ΠΊΠΆΠ΅ пСрСмСнная ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π΅Π΅.
ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ структуры:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ contact1 являСтся структурированным Ρ‚ΠΈΠΏΠΎΠΌ ΠΈ
Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 44 Π±Π°ΠΉΡ‚Π° (20 + 20 + 4), Π° contactPointer ΠΈΠΌΠ΅Π΅Ρ‚
ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСго 4 Π±Π°ΠΉΡ‚Π°.

5.3.1.

Вопросы для самооцСнки

(limits.h) — Бсылка C ++

МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° unsigned int

940 LLONG_MAX

имя Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ *
CHAR_BIT Число Π±ΠΈΡ‚ΠΎΠ² Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ char (Π±Π°ΠΉΡ‚) 8 ΠΈΠ»ΠΈ большС *
SCHAR_MIN МинимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° подписанный символ -127 (-2 7 +1 ) ΠΈΠ»ΠΈ мСньшС *
SCHAR_MAX 9027

МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° signed char 127 ( 2 7 -1 ) ΠΈΠ»ΠΈ большС *
UCHAR_MAX МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° unsigned char 255 ( 2 8 -1 ) ΠΈΠ»ΠΈ большС *
CHAR_MIN МинимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° char Π»ΠΈΠ±ΠΎ SCHAR_MIN , Π»ΠΈΠ±ΠΎ 0
CHAR_MAX МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° char Π»ΠΈΠ±ΠΎ SCHAR26_MAX , Π»ΠΈΠ±ΠΎ SCHAR26_MAX ΠΈΠ»ΠΈ 9027XUCHAR_MAX ΠΈΠ»ΠΈ UCHAR_MAX МаксимальноС количСство Π±Π°ΠΉΡ‚ΠΎΠ² Π² ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠΌ символС для любой Π»ΠΎΠΊΠ°Π»ΠΈ 1 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ *
SHRT_MIN МинимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° short int -32767 (-2 15 +1 ) ΠΈΠ»ΠΈ мСньшС *
SHRT_MAX МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° short int 32767 ( 2 15 -1 ) ΠΈΠ»ΠΈ большС *
USHRT_MAX МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° unsigned short int 6553 5 ( 2 16 -1 ) ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ *
INT_MIN МинимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° int -32767 (-2 15 +1 ) ΠΈΠ»ΠΈ мСньшС *
INT_MAX МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° int 32767 ( 2 15 -1 ) ΠΈΠ»ΠΈ большС *
UINT_MAX

1

65535 ( 2 16 -1 ) или большС *
LONG_MIN МинимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° long int -2147483647 (-2 31 +1 ) ΠΈΠ»ΠΈ мСньшС *
LONG_MAX МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° long int 2147483647 ( 2 31 -1 ) ΠΈΠ»ΠΈ большС *
ULONG_MAX МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° unsigned long int 4294967295 (

25 2 ) или большС *

LLONG_MIN МинимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° long long int -9223372036854775807 (-2 63 +1 ) ΠΈΠ»ΠΈ мСньшС * МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° long long int 9223372036854775807 ( 2 63 -1 ) ΠΈΠ»ΠΈ большС *
ULLONG_47

Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

1 Ρ‚ΠΈΠΏ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ int 18446744073709551615 ( 2 64 -1 ) ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ *

Бписок всСх спСцификаторов Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ спСцификаторов Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° стандартный Π²Ρ‹Π²ΠΎΠ΄. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π²ΠΎΠ΄, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ спСцификаторы Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ строкой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°.

Π’ΠΎΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список всСх спСцификаторов Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² языкС программирования C.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ — Бписок всСх Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² C

9

o
Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ОписаниС ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…
% c Π‘ΠΈΠΌΠ²ΠΎΠ» char
unsigned char
% d Π¦Π΅Π»ΠΎΠ΅ число со Π·Π½Π°ΠΊΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅
Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅
int
long
% e or% E НаучноС прСдставлСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой float
double
% f Floating point float
% g or% G Аналогично% e or% E float
double
% hi Signed Integer (Short) short
% hu Unsigned Integer ( Short) unsigned short
% i Signed Integer short
unsigned short
int
long 9004 7
% l ΠΈΠ»ΠΈ% ld ΠΈΠ»ΠΈ% li Π¦Π΅Π»ΠΎΠ΅ число со Π·Π½Π°ΠΊΠΎΠΌ long
% lf Floating point double
% Lf Floating point long double
% lu Π‘Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ unsigned int
unsigned long
% lli,% lld Signed Integer long long
% llu Unsigned Integer% unsigned long long
Π’ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС Ρ†Π΅Π»ΠΎΠ³ΠΎ числа. short
unsigned short
int
unsigned int
long
% p АдрСс указатСля Π½Π° void void * void *
% s String char *
% u Π¦Π΅Π»ΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ° Π¦Π΅Π»ΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ°
Π”Π»ΠΈΠ½Π½ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ°
% x ΠΈΠ»ΠΈ% X ШСстнадцатСричноС прСдставлСниС Ρ†Π΅Π»ΠΎΠ³ΠΎ числа Π±Π΅Π· Π·Π½Π°ΠΊΠ° short
unsigned short
int
unsigned int
long
% nints% nints Π½ΠΈΡ‡Π΅Π³ΠΎ
%% ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚% character

О Панкай

ПанкадТ ΠŸΡ€Π°ΠΊΠ°Ρˆ — ΠΎΡΠ½ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈ Π±Π»ΠΎΠ³Π΅Ρ€ Codeforwin. Он Π»ΡŽΠ±ΠΈΡ‚ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, особСнно для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Vasudhaika Software Sols. ΠΊΠ°ΠΊ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ управляСт Codeforwin. ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, ПанкадТ — Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π±Π»ΠΎΠ³Π³Π΅Ρ€, ΡƒΡ‡Π΅Π½ΠΈΠΊ, Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ ΠΌΡƒΠ·Ρ‹ΠΊΠΈ.

ΠŸΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π°: Facebook | Twitter | Google | Π’Π΅Π±-сайт ΠΈΠ»ΠΈ всС сообщСния Pankaj

Π―Π·Ρ‹ΠΊ CompCert C

Π―Π·Ρ‹ΠΊ CompCert C


Π’ этой Π³Π»Π°Π²Π΅ описываСтся Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ языка программирования C, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ
рСализуСтся компилятором CompCert C ΠΈ справочным ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ.Он ΠΎΡ‡Π΅Π½ΡŒ Π±Π»ΠΈΠ·ΠΊΠΎ слСдуСт стандарту ISO C99 [5].
НСкоторыС особСнности C99 Π½Π΅
поддСрТиваСтся Π²ΠΎΠΎΠ±Ρ‰Π΅; Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅
ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ языковой ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. На
с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для C99, заимствованныС ΠΈΠ·
стандарт ISO C2011 [6].

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ описываСм ΠΊΠ°ΠΊ ограничСния, Ρ‚Π°ΠΊ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ
CompCert C ΠΏΠΎ стандарту C99. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ, ΠΊΠ°ΠΊ
CompCert Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΊΠ°ΠΊ
зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² C99.ОписаниС слСдуСт Π·Π°
структура стандартного Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° C99 [5]. ОсобСнно,
Π½ΠΎΠΌΠ΅Ρ€Π° Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ǥ5.1.2.2Β») ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌ C99
стандартный Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.

Β§5 ΠžΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π°Ρ срСда

Β§5.1.2.2 РазмСщСнная срСда.
CompCert C слСдуСт ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠΉ срСды. Ѐункция называСтся
ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ называСтся main. Богласно Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ
сСмантика, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:
int main (void) {…}.
ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ CompCert C Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ двухпарамСтричСский
Ρ„ΠΎΡ€ΠΌΠ° int main (int argc, char * argv []).
Β§5.2.1.2 ΠœΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ символы.
ΠœΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ символы Π² исходниках ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ.
Β§5.2.4.2 ЧисловыС ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹.
Π’ зависимости ΠΎΡ‚ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ цСлочислСнныС Ρ‚ΠΈΠΏΡ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π΄Π²ΡƒΡ…
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, модСль Β«ILP32LLΒ» ΠΈΠ»ΠΈ модСль Β«I32LP64Β»:

ЦСлСвая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π Π°Π·ΠΌΠ΅Ρ€ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ЦСлочислСнная модСль
x86 64 Π±ΠΈΡ‚Π°, RISC-V 64 Π±ΠΈΡ‚Π° 64 Π±ΠΈΡ‚Π° (8 Π±Π°ΠΉΡ‚) I32LP64
ARM, PowerPC, x86 32 Π±ΠΈΡ‚Π°, RISC-V 32 Π±ΠΈΡ‚Π° 32 Π±ΠΈΡ‚Π° (4 Π±Π°ΠΉΡ‚Π°) ILP32LL

ЧисловыС ограничСния для Ρ†Π΅Π»Ρ‹Ρ… чисСл:

Π’ΠΈΠΏ Π Π°Π·ΠΌΠ΅Ρ€ Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
символ Π±Π΅Π· Π·Π½Π°ΠΊΠ° 1 Π±Π°ΠΉΡ‚ ΠΎΡ‚ 0 Π΄ΠΎ 255
символ со Π·Π½Π°ΠΊΠΎΠΌ 1 Π±Π°ΠΉΡ‚ βˆ’128 Π΄ΠΎ 127
символ 1 Π±Π°ΠΉΡ‚ ΠΊΠ°ΠΊ символ со Π·Π½Π°ΠΊΠΎΠΌ Π½Π° x86
как символ бСз знака на PowerPC, ARM и RISC-V
Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ 2 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 0 Π΄ΠΎ 65535
подписанный ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ 2 Π±Π°ΠΉΡ‚Π° βˆ’32768 Π΄ΠΎ 32767
ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ 2 Π±Π°ΠΉΡ‚Π° βˆ’32768 Π΄ΠΎ 32767
unsigned int 4 Π±Π°ΠΉΡ‚Π° 0 Π΄ΠΎ 2 32 βˆ’1
со Π·Π½Π°ΠΊΠΎΠΌ int 4 Π±Π°ΠΉΡ‚Π° βˆ’2 31 Π΄ΠΎ 2 31 βˆ’1
int 4 Π±Π°ΠΉΡ‚Π° βˆ’2 31 t o 2 31 βˆ’1
Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ 4 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 0 Π΄ΠΎ 2 32 βˆ’1 Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ ILP32LL
8 Π±Π°ΠΉΡ‚ΠΎΠ² ΠΎΡ‚ 0 Π΄ΠΎ 2 64 βˆ’1 дюйм модСль I32LP64
длинная со Π·Π½Π°ΠΊΠΎΠΌ 4 Π±Π°ΠΉΡ‚Π° βˆ’2 31 Π΄ΠΎ 2 31 βˆ’1 Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ ILP32LL
8 Π±Π°ΠΉΡ‚ΠΎΠ² βˆ’2 63 Π΄ΠΎ 2 63 βˆ’1 Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ I32LP64
long 4 Π±Π°ΠΉΡ‚Π° βˆ’2 31 Π΄ΠΎ 2 31 βˆ’1 Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ ILP32LL
8 Π±Π°ΠΉΡ‚ΠΎΠ² βˆ’2 63 Π΄ΠΎ 2 63 -1 Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ I32LP64
Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ 8 Π±Π°ΠΉΡ‚ΠΎΠ² 0 Π΄ΠΎ 2 64 -1
подписанноС Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ 8 Π±Π°ΠΉΡ‚ΠΎΠ² -2 63 Π΄ΠΎ 2 63 — 1
long long 8 Π±Π°ΠΉΡ‚ΠΎΠ² βˆ’2 63 Π΄ΠΎ 2 63 βˆ’1
_Bool 1 Π±Π°ΠΉΡ‚ 0 ΠΈΠ»ΠΈ 1

Π’ΠΈΠΏΡ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ стандарту IEEE 754-2008 [12]:

Π’ΠΈΠΏ ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π Π°Π·ΠΌΠ΅Ρ€ ΠœΠ°Π½Ρ‚ΠΈΡΡΠ° ΠŸΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ
с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой IEEE 754 ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ точности 4 Π±Π°ΠΉΡ‚Π° 23 Π±ΠΈΡ‚Π° βˆ’126 Π΄ΠΎ 127
Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ IEEE 754 с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ 8 Π±Π°ΠΉΡ‚ΠΎΠ² 52 Π±ΠΈΡ‚Π° βˆ’1022 Π΄ΠΎ 1023
(Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ64) 900 long double ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ поддСрТиваСтся; с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -flongdouble,
ΠΊΠ°ΠΊ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ

Π’ΠΎ врСмя ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏΠΎΠΌ, Π±Π΅Π· лишнСй точности ΠΈ
ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ соотвСтствуСт FLT_EVAL_METHOD, Ρ€Π°Π²Π½ΠΎΠΌΡƒ 0.

Β§6 Π―Π·Ρ‹ΠΊ

Β§6.2 ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ
Β§6.2.5 Π’ΠΈΠΏΡ‹
CompCert C ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС Ρ‚ΠΈΠΏΡ‹, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² C99, с
ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

  • Π’ΠΈΠΏ long double ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ поддСрТиваСтся. Если
    УстановлСна ​​опция -flongdouble, ΠΎΠ½Π° рассматриваСтся ΠΊΠ°ΠΊ синоним double.
  • Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ (double _Complex ΠΈ Ρ‚. Π”.) НС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ.
  • Π’ΠΈΠΏ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈ Ρ‚ΠΈΠΏΡ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹
    Π±Ρ‹Ρ‚ΡŒ структурой ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ объСдинСния, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -fstruct-pass
    Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ (Ρ€Π°Π·Π΄Π΅Π» 3.2.9).
  • ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ. Π Π°Π·ΠΌΠ΅Ρ€ N
    Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€ массива T [N] всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ константным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции.
Β§6.2.6 ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²

Π¦Π΅Π»Ρ‹Π΅ числа со Π·Π½Π°ΠΊΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ прСдставлСниС с Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎ Π΄Π²ΡƒΡ….

Β§6.3 ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ цСлочислСнного значСния Π² цСлочислСнный Ρ‚ΠΈΠΏ со Π·Π½Π°ΠΊΠΎΠΌ всСгда
опрСдСляСтся ΠΊΠ°ΠΊ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ цСлочислСнного значСния ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2 N Π΄ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°
значСния, прСдставлСнныС N-Π±ΠΈΡ‚Π½Ρ‹ΠΌ цСлочислСнным Ρ‚ΠΈΠΏΠΎΠΌ со Π·Π½Π°ΠΊΠΎΠΌ.

ЗначСния указатСля ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² любой Ρ‚ΠΈΠΏ указатСля. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля
Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² любой цСлочислСнный Ρ‚ΠΈΠΏ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°
ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ исходному Ρ‚ΠΈΠΏΡƒ указатСля: Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½
исходноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля. Π’ΠΈΠΏΡ‹ intptr_t ΠΈ uintptr_t ΠΈΠ·
— это Ρ†Π΅Π»Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, подходящиС для этой Ρ†Π΅Π»ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ
Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ ΠΈ всС Ρ‚ΠΈΠΏΡ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Π² ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅Π΅ округляСт число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой.
Π΄ΠΎ блиТайшСго числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, прСдставимого с ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ.ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ цСлочислСнных Ρ‚ΠΈΠΏΠΎΠ² Π² Ρ‚ΠΈΠΏΡ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой ΠΎΠΊΡ€ΡƒΠ³Π»ΡΡŽΡ‚ΡΡ Π΄ΠΎ
блиТайшСС прСдставимоС число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой.

Β§6.4 ЛСксичСскиС элСмСнты
Β§6.4.1 ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова.
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова:

 _Alignas _Alignof __attribute__ __attribute
    __const __const__ __inline __inline__
    __restrict __restrict__ __packed__
    asm __asm ​​__asm__
    _Noreturn _Static_assert
 
Β§6. 4.2 Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹
ВсС символы ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π·Π½Π°Ρ‡ΠΈΠΌΡ‹, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ Π½Π΅Π³ΠΎ
внСшняя связь ΠΈΠ»ΠΈ Π½Π΅Ρ‚. РСгистр ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°ΠΆΠ΅ Π² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°Ρ… с
внСшняя связь. Π’ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°Ρ… допускаСтся использованиС символа Β«$Β» (Π΄ΠΎΠ»Π»Π°Ρ€).
Β§6.4.3 ИмСна ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… символов
Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° символов ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… константах ΠΈ
строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹. Они Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°Ρ….
Β§6.5 ВыраТСния

CompCert C ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² C99, с
ограничСния ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, описанныС Π½ΠΈΠΆΠ΅., ~, <<, >>) Π½Π°Π΄ цСлочислСнными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ со Π·Π½Π°ΠΊΠΎΠΌ
интСрпрСтируСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ с Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎ Π΄Π²ΡƒΡ….

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой ΠΎΠΊΡ€ΡƒΠ³Π»ΡΡŽΡ‚ свои Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π΄ΠΎ блиТайшСго
прСдставимоС число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, разрывая связи ΠΏΡƒΡ‚Π΅ΠΌ округлСния Π΄ΠΎ
Π΄Π°ΠΆΠ΅ мантисса. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° измСняСт Ρ€Π΅ΠΆΠΈΠΌ округлСния Π²ΠΎ врСмя выполнСния,
ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ скомпилирован с Ρ„Π»Π°Π³ΠΎΠΌ -ffloat-const-prop 0
(Ρ€Π°Π·Π΄Π΅Π» 3.2.3). Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС компилятор Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚
ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой Π²ΠΎ врСмя компиляции, прСдполагая
Ρ€Π΅ΠΆΠΈΠΌ округлСния Π΄ΠΎ блиТайшСго.

ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ с ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ
Ссли ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ float (Ρ‚.Π΅. всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ†Π΅Π»ΠΎΠ΅ число ΠΈΠ»ΠΈ
Ρ‚ΠΈΠΏΡ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой) ΠΈ с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, Ссли ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ double
(Ρ‚.Π΅. ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ double). Π­Ρ‚ΠΎ соотвСтствуСт
FLT_EVAL_METHOD Ρ€Π°Π²Π½ΠΎ 0.

ЦСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, хранящССся Π² (части) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΌΠΎΠΆΠ΅Ρ‚
Π±Ρ‹Ρ‚ΡŒ доступным для любого lvalue, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ цСлочислСнный Ρ‚ΠΈΠΏ ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой. Π’
эффСкт Ρ‚Π°ΠΊΠΎΠ³ΠΎ доступа опрСдСляСтся с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ уровня
прСдставлСниС Ρ‚ΠΈΠΏΠΎΠ² (Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ Π΄Π²ΡƒΡ… для Ρ†Π΅Π»Ρ‹Ρ… чисСл, IEEE 754
для чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой) ΠΈ порядок Π±Π°ΠΉΡ‚ΠΎΠ² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ (ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ порядок Π±Π°ΠΉΡ‚ΠΎΠ² для
PowerPC, прямой порядок Π±Π°ΠΉΡ‚ΠΎΠ² для x86 ΠΈ RISC-V, ΠΈ порядок Π±Π°ΠΉΡ‚ΠΎΠ², зависящий ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
для ARM).Напротив, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля, хранящССся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ
доступ ΠΊ lvalue, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΌΡƒ Ρ‚ΠΈΠΏ указатСля ΠΈΠ»ΠΈ цСлочислСнный Ρ‚ΠΈΠΏ с
Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎ ΠΈ Ρ‚ΠΈΠΏ указатСля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ intptr_t ΠΈ uintptr_t.
Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ прСдставлСниС Π² памяти
Ρ†Π΅Π»Ρ‹Π΅ числа ΠΈ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ сСмантикой CompCert C,
прСдставлСниС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π² памяти остаСтся Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ
провСряСтся с любой ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ слова Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

Β§6.5.2 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Postfix
Если ΠΊ Ρ‡Π»Π΅Π½Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° объСдинСния осущСствляСтся доступ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ
хранится Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ‡Π»Π΅Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ
описано Π² послСднСм Π°Π±Π·Π°Ρ†Π΅ Π²Ρ‹ΡˆΠ΅: опСрация Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°
Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° это Π½Π΅ Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° собой доступ ΠΊ сохранСнному Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ указатСля с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
Ρ‚ΠΈΠΏ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° указатСля ΠΈΠ»ΠΈ цСлочислСнного Ρ‚ΠΈΠΏΠ° с Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ
ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ указатСля.НапримСр, дСкларация

 союз u {Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ d; Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ int я [2]; Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ символ c [8]; };
 

ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ доступ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ Ρ‡Π»Π΅Π½Ρƒ послС сохранСния любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π°.
Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, рассмотрим

 союз u {char * ptr; Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ символ c [4]; };
 

Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля хранится Π² Ρ‡Π»Π΅Π½Π΅ ptr, доступ ΠΊ
элСмСнты Ρ‡Π»Π΅Π½Π° c Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹.

Β§6.5.3 Π£Π½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹
Π‘ΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ sizeof CompCert C ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚
ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ _Alignof ΠΈΠ· C2011, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ
__alignof__ ΠΊΠ°ΠΊ Π² GNU C.Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ примСняСтся ΠΊ Ρ‚ΠΈΠΏΡƒ, Π½ΠΎ Π½Π΅
ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ СстСствСнноС Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π² Π±Π°ΠΉΡ‚Π°Ρ… этого
Ρ‚ΠΈΠΏ.

Π’ΠΈΠΏ size_t Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° sizeof ΠΈ _Alignof ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
Π±Ρ‹Ρ‚ΡŒ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ.

Β§6.5.4 ΠžΡ‚Π»ΠΈΠ²ΠΊΠΈ
Π‘ΠΌ. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ Β§6.3 (Β«ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡΒ») Π²Ρ‹ΡˆΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ
ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ цСлочислСнным Ρ‚ΠΈΠΏΠ°ΠΌ со Π·Π½Π°ΠΊΠΎΠΌ.
Β§6.5.5 ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹
Π”Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ остаток Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, Ссли Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ€Π°Π²Π΅Π½
Π½ΡƒΠ»ΡŒ. Π—Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ остаток Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, Ссли ΠΏΠ΅Ρ€Π²ΠΎΠ΅
Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ — наимСньшСС прСдставимоС Ρ†Π΅Π»ΠΎΠ΅ число со Π·Π½Π°ΠΊΠΎΠΌ (βˆ’2 31
для Ρ‚ΠΈΠΏΠ° int), Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ — -1 (СдинствСнный
случай пСрСполнСния дСлСния).
Β§6. 5.6 АддитивныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹
Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ указатСля ΠΈ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа ΠΈΠ»ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа ΠΈΠ·
ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, всСгда ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, Π΄Π°ΠΆΠ΅ Ссли Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚
Π²Π½Π΅ Π³Ρ€Π°Π½ΠΈΡ† Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚Π° с
ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±Π°Π·Ρ‹ Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° обрабатываСтся ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ
2 32 ΠΈΠ»ΠΈ 2 64 (Π² зависимости ΠΎΡ‚ разрядности ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π°
Ρ†Π΅Π»Π΅Π²ΠΎΠΉ процСссор). Π’Π°ΠΊΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π³Ρ€Π°Π½ΠΈΡ† Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ undefined
ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ сравнСнии с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ указатСлями.
Β§6.5.7 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сдвига
ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сдвига Π²ΠΏΡ€Π°Π²ΠΎ >> примСняСтся ΠΊ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ†Π΅Π»ΠΎΠΌΡƒ числу со Π·Π½Π°ΠΊΠΎΠΌ
задаСтся ΠΊΠ°ΠΊ сдвиг Π² Π±ΠΈΡ‚Π°Ρ… Β«1Β» слСва.
Β§6.5.8 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ
Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ указатСлями всСгда опрСдСляСтся, Ссли ΠΎΠ±Π°
ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².
ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сравнСниС Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСтся, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ
«Один Π·Π° ΠΊΠΎΠ½Ρ†ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β», Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½
ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ»ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Β«ΠΎΠ΄ΠΈΠ½ Π·Π°Β» ΠΊΠΎΠ½Ρ†ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ
ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
Β§6.5.9 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ равСнства
Π’ΠΎ ΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π² Β§6.5.8 ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сравнСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.
Β§6.6 ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹Π΅ выраТСния
Никаких ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ ΠΎΡ‚ C99.
Β§6.7 ЗаявлСния
CompCert C ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС объявлСния, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² C99, с
ограничСния ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, описанныС Π½ΠΈΠΆΠ΅.

Β§6.7.2 Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ‚ΠΈΠΏΠ°
Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ (спСцификатор _Complex) Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ.
Β§6.7.2.1 Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ структуры ΠΈ объСдинСния
Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля Π² структурах ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΡ…
Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π·
ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· исходного ΠΊΠΎΠ΄Π° Π² исходный, Ссли Π·Π°Π΄Π°Π½Π° опция -fbitfields
Π²Ρ‹Π±Ρ€Π°Π½ΠΎ (Ρ€Π°Π·Π΄Π΅Π» 3.2.9).

Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля «простого» Ρ‚ΠΈΠΏΠ° int ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ подписанныС. Π’
Π² соотвСтствии с Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ интСрфСйсами ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ELF, Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля
Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Ρ†Π΅Π»ΠΎΠ³ΠΎ числа Π² PowerPC ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ Π±ΠΈΡ‚Ρ‹.
ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, ΠΈ сначала младшиС Π±ΠΈΡ‚Ρ‹ Π½Π° ARM ΠΈ x86
ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ Ρ†Π΅Π»ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ.

Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пСрСчислимого Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ enum e x: 2. Π’Π°ΠΊΠΎΠΉ Π±ΠΈΡ‚
поля ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅, Ссли это Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ всС значСния
пСрСчислСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ прСдставлСно Ρ‚ΠΎΡ‡Π½ΠΎ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ количСствС Π±ΠΈΡ‚, ΠΈ
ΠΊΠ°ΠΊ подписано ΠΈΠ½Π°Ρ‡Π΅.

Π§Π»Π΅Π½Ρ‹ структуры Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² объявлСнии ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ
порядок, с достаточным количСством вставлСнных Π±Π°ΠΉΡ‚ΠΎΠ² заполнСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ
Ρ‡Π»Π΅Π½ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½ ΠΏΠΎ своСму СстСствСнному Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΡŽ. ЕстСствСнноС Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅
Ρ‡Π»Π΅Π½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ _Alignas.Π Π°Π·Π½Ρ‹Π΅
ΠΌΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹, Ссли установлСна ​​опция -fpacked-Structs
(Ρ€Π°Π·Π΄Π΅Π» 3.2.9) ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ (Ρ€Π°Π·Π΄Π΅Π» 6.2)
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ.

АнонимныС структуры ΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ объСдинСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π² C2011.
(ОписаниС см. Π’ стандартС C2011, Β§6.7.2.1, ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ 13.)

Β§6.7.2.2 ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ
ЗначСния Ρ‚ΠΈΠΏΠ° пСрСчислСния ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ int.
Β§6.7.3 ΠšΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ‚ΠΈΠΏΠ°
Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ const ΠΈ volatile, Π°
ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅ для Π»Π΅Ρ‚ΡƒΡ‡ΠΈΡ… составных Ρ‚ΠΈΠΏΠΎΠ².ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅
ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ принимаСтся, Π½ΠΎ игнорируСтся.

Доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ скалярного Ρ‚ΠΈΠΏΠ° с ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΌΡΡ ΠΊΠΎΠ΄ΠΎΠΌ являСтся
обрабатываСтся, ΠΊΠ°ΠΊ описано Π² ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ 6 Ρ€Π°Π·Π΄Π΅Π»Π° 6.7.3: ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅
ΠΈ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ рассматриваСтся CompCert C ΠΊΠ°ΠΊ наблюдаСмоС событиС.
Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ сСмантика, ΠΈ поэтому Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ со стороны
ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ CompCert. Доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ измСняСмого
составной Ρ‚ΠΈΠΏ (Ρ‚ΠΈΠΏ структуры ΠΈΠ»ΠΈ объСдинСния) обрабатываСтся ΠΊΠ°ΠΊ
рСгулярный, энСргонСзависимый доступ: Π½Π΅ создаСтся наблюдаСмоС событиС, ΠΈ
доступ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΡŒ.ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ CompCert Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²
послСдний случай.

Π’ соотвСтствии с ISO C2011 CompCert ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ _Alignas
ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ для объявлСний ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Ρ‡Π»Π΅Π½ΠΎΠ².
Π­Ρ‚ΠΎΡ‚ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π±Ρ‹Π²Π°Π΅Ρ‚ Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΎΠ²:
_Alignas (N), Π³Π΄Π΅ N — Ρ†Π΅Π»ΠΎΠ΅ число константы Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции
Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π΄Π²ΠΎΠΉΠΊΠΈ; ΠΈ _Alignas (T),
Π³Π΄Π΅ T — Ρ‚ΠΈΠΏ. ПослСдняя Ρ„ΠΎΡ€ΠΌΠ° эквивалСнтна
_Alignas (_Alignof (T)).

Π­Ρ„Ρ„Π΅ΠΊΡ‚ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° _Alignas (N) Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ
Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, установив Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° N.Π’ частности, это влияСт Π½Π° располоТСниС ΠΏΠΎΠ»Π΅ΠΉ структуры. Π—Π°
ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

 struct s {char c; int _Alignas (8) я; };
 

ΠšΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Alignas (8) измСняСт Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ поля i с 4
(СстСствСнноС Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° int) Π΄ΠΎ 8. Π­Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ 7 Π±Π°ΠΉΡ‚ΠΎΠ² заполнСния
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ вставлСн ΠΌΠ΅ΠΆΠ΄Ρƒ c ΠΈ i вмСсто ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… 3 Π±Π°ΠΉΡ‚ΠΎΠ².
Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ структуры с 8 Π΄ΠΎ 12, Π° Ρ€Π°Π·ΠΌΠ΅Ρ€
Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ структур ΠΎΡ‚ 4 Π΄ΠΎ 8.

Π’Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ N, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π΅ _Alignas (N), Π΄ΠΎΠ»ΠΆΠ½ΠΎ
ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ СстСствСнному Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΡŽ
ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ.Для Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π½Π΅Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ
доступов (x86, PowerPC ΠΈ RISC-V, Π½ΠΎ Π½Π΅ ARM), N Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мСньшС, Ρ‡Π΅ΠΌ
СстСствСнноС Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅.

НаконСц, CompCert C обСспСчиваСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ стиля GCC.
Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ (ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово __attribute), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Ρ‚ΠΈΠΏΠ°.
Π‘ΠΌ. Π Π°Π·Π΄Π΅Π» 6.2.

Β§6.7.4 Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π²Π° спСцификатора Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ: встроСнныС ΠΈΠ· ISO C99 ΠΈ
_Noreturn ΠΈΠ· ISO C2011.
Β§6.7.5.2 Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ массивов
ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ.ЕдинствСнный ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ массив
Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ISO C90, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ [] для Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ массива
type ΠΈ [N], Π³Π΄Π΅ N — Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ константы Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции.
для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° массива.
Β§6.7.5.3 Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
Π’ΠΈΠΏ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ структурой ΠΈΠ»ΠΈ объСдинСниСм.
type, Ссли Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½Π° опция -fstruct-return (Ρ€Π°Π·Π΄Π΅Π» 3.2.9).
Β§6.7.8 Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ (ISO C90), Ρ‚Π°ΠΊ ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹,
Π² соотвСтствии с ISO C99.
БтатичСскиС утвСрТдСния
CompCert ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ статичСскиС утвСрТдСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова _Static_assert.
ΠΊΠ°ΠΊ описано Π² стандартС C2011, Β§6.7.10.
Β§6.8 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Π±Π»ΠΎΠΊΠΈ
ВсС Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² C99, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² CompCert C,
Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, описанным Π½ΠΈΠΆΠ΅.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ asm (популярноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для встроСнной сборки) Π½Π΅
поддСрТиваСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ поддСрТиваСтся, Ссли Π·Π°Π΄Π°Π½Π° опция -finline-asm
Π½Π°Π±ΠΎΡ€. Π‘ΠΌ. Π Π°Π·Π΄Π΅Π» 6.6 для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ описания
синтаксис ΠΈ сСмантика asm-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

Β§6.8.4.2 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ switch
ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ switch Π² CompCert C ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½
«Бтруктурированная» Ρ„ΠΎΡ€ΠΌΠ°, прСдставлСнная Π½Π° Java ΠΈ утвСрТдСнная Misra-C. А ΠΈΠΌΠ΅Π½Π½ΠΎ,
ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ switch Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ:

    switch (Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) {
        case expr1: ...
        case expr2: ...
        ...
        Π΄Π΅Ρ„ΠΎΠ»Ρ‚: ...
    }
 

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, рСгистр ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, относящиСся ΠΊ
ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π»ΠΎΠΊΠ° послС
Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ. Они Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠ°Ρ… ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ.
Ρ‚Π°ΠΊΠΈΠ΅ структуры, ΠΊΠ°ΠΊ if, while ΠΈΠ»ΠΈ for.Π’ частности,
устройство ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½ΠΎ извСстного Π”Π°Ρ„Ρ„Π° Π½Π΅ поддСрТиваСтся.

Как Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Java ΠΈ Misra-C, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
заявлСниС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² сСрСдинС случаСв, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² послСднСм.

Β§6.9 Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ опрСдСлСния
ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ написаны Π² соврСмСнной, ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅. Π’
компилятор ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°ΠΌΠΈ, Π½ΠΎ
ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΈΡ… Π² Ρ„ΠΎΡ€ΠΌΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°. Π’ частности, T f () {…} Π΅ΡΡ‚ΡŒ
автоматичСски конвСртируСтся Π² T f (void) {…}.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ числом Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ
ΠΌΠ½ΠΎΠ³ΠΎΡ‚ΠΎΡ‡ΠΈΠ΅ … Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ.

Π’ΠΈΠΏ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ структурой ΠΈΠ»ΠΈ объСдинСниСм.
type, Ссли Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½Π° опция -fstruct-return (Ρ€Π°Π·Π΄Π΅Π» 3.2.9).

Β§6.10 Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ CompCert C Π½Π΅ выполняСт ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, Π°
Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ эту Π·Π°Π΄Π°Ρ‡Ρƒ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ прСпроцСссору C, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€
GCC. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ внСшний прСпроцСссор соотвСтствуСт
стандарт C99.

Β§7 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ CompCert C Π½Π΅ прСдоставляСт собствСнной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C. Он прСдоставляСт нСсколько стандартных Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΈ полагаСтся Π½Π°
стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмы для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…. CompCert
ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ использовался вмСстС с GNU glibc
стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Однако ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

Β§7.6 Π‘Ρ€Π΅Π΄Π° с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ
Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ сСмантика ΠΈ этапы ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ CompCert ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚
ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ округлСния Π΄ΠΎ блиТайшСго Π² Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой.Если
ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° мСняСт Ρ€Π΅ΠΆΠΈΠΌΡ‹ округлСния Π²ΠΎ врСмя выполнСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ fesetround
функция, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ скомпилирована с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -ffloat-const-prop ΠΎΡ‚ 0 Π΄ΠΎ
ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой.
Β§7.12 ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°
МногиС вСрсии Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ вСрсии ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ
Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΊΠΎΠ΄ΠΎΠΌ, скомпилированным CompCert.
ΠΈΠ·-Π·Π° отсутствия ABI-совмСстимой ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ‚ΠΈΠΏΠ° long double.
Β§7.13 ΠΠ΅Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ скачки
ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ CompCert C Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ ΠΎ setjmp ΠΈ
longjmp, рассматривая ΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ²Π°ΠΆΠ°ΡŽΡ‚
ΠΏΠΎΡ‚ΠΎΠΊ управлСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
Π² ΠΊΠΎΠ΄Π΅, скомпилированном CompCert. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ, это
Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π²ΠΎ врСмя Π²Ρ‹Π·ΠΎΠ²Π°
setjmp ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ volatile.

Какой Ρ‚ΠΈΠΏ константы Π² C?

Когда ΠΌΡ‹ пишСм Ρ‚Π°ΠΊΠΈΠ΅ выраТСния Π² C:

  bool b = 1234567890> 09876;
  

ΠšΠ°ΠΊΠΎΠ²Ρ‹ Ρ‚ΠΈΠΏΡ‹ этих констант? НомСр 1234567890 — ΠΊΠ°ΠΊΠΎΠΉ Ρƒ Π½Π΅Π³ΠΎ Ρ‚ΠΈΠΏ? Как это прСдставляСт C ΠΏΡ€ΠΈ компиляции? Π―Π·Ρ‹ΠΊ программирования C Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚:

ЦСлочислСнная константа Π²Ρ€ΠΎΠ΄Π΅ 1234 — это int .ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° long записываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° l (ell) ΠΈΠ»ΠΈ
L , ΠΊΠ°ΠΊ 123456789L ; цСлочислСнная константа, слишком большая для размСщСния Π² int , Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ принята ΠΊΠ°ΠΊ long .
Π‘Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ константы Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° u ΠΈΠ»ΠΈ U , Π° суффикс ul ΠΈΠ»ΠΈ UL ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚
Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ .

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ содСрТат Π΄Π΅ΡΡΡ‚ΠΈΡ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ ( 123.4 ) ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСпСни ( 1e-2 ) ΠΈΠ»ΠΈ ΠΎΠ±Π°; ΠΈΡ…
Ρ‚ΠΈΠΏ — Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ , Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ суффикс. Буффиксы f ΠΈΠ»ΠΈ F ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° константу с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой ; Π» ΠΈΠ»ΠΈ Π» ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ
Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ .

Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

  0 // int
0l // Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ
1234 // ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»
1234L // Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ
0ul // Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅
0u // Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅
2147483647 // int (просто)
2147483648 // Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ
2147483647u // Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅
2147483648u // Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ (Π½ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΡƒΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π² Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅)
0x0101010101010101ULL // unsigned long long
  

Π― Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ освободил Π’ΠΈΠ΄Ρ€ΠΈΠΎ,
бСсплатноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для macOS ΠΈ Windows, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ совмСстноС использованиС экрана нСвСроятно голографичСским.Vidrio ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²ΠΈΠ΄Π΅ΠΎ с Π²Π΅Π±-ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Π½Π° экранС, ΠΊΠ°ΠΊ Π² Π·Π΅Ρ€ΠΊΠ°Π»Π΅.
Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ просто Π΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ ΠΈΠ»ΠΈ записываСтС свой экран с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Zoom, QuickTime ΠΈΠ»ΠΈ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ прилоТСния.
Vidrio Π΄Π΅Π»Π°Π΅Ρ‚ ваши ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, показывая ваши ТСсты, взгляды ΠΈ выраТСния.
β„–1 Π½Π° Product Hunt.
Доступно для macOS ΠΈ Windows.

Π•Ρ‰Π΅ ΠΎΡ‚ Jim

ΠŸΠΎΠΌΠ΅Ρ‡Π΅Π½ΠΎ.
АвторскиС ΠΏΡ€Π°Π²Π° Π½Π° всС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ДТСймсу Π€ΠΈΡˆΠ΅Ρ€Ρƒ, 2017 Π³.
Π­Ρ‚ΠΎΡ‚ пост Π½Π΅ связан с ΠΌΠΎΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚ΠΎΠ΄Π°Ρ‚Π΅Π»Π΅ΠΌ.Нашли ΠΎΡˆΠΈΠ±ΠΊΡƒ? ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ эту страницу.

ЦСлочислСнныС константы

ЦСлочислСнныС константы

ЦСлочислСнныС константы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ дСсятичными (основаниС 10), ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ (основаниС 16), Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ (основаниС 2) ΠΈΠ»ΠΈ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ (основаниС 8). Π’ отсутствиС ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΡ… суффиксов Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… цСлочислСнной константы являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ Π΅Π΅ значСния.

Π”Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ суффиксы

Буффикс L (ΠΈΠ»ΠΈ l ), присваиваСмый Π»ΡŽΠ±Ρ‹ΠΌ постоянным силам, эта константа Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ прСдставлСна ​​как Π΄Π»ΠΈΠ½ΠΎΠΉ .Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ суффикс U (ΠΈΠ»ΠΈ u ) заставляСт константу Π±Ρ‹Ρ‚ΡŒ Π±Π΅Π· Π·Π½Π°ΠΊΠ° .
Буффиксы L ΠΈ U ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ константой Π² любом порядкС ΠΈ Π² любом случаС: ul , Lu , UL ΠΈ Ρ‚. Π”.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ суффиксы ULL (ΠΈΠ»ΠΈ ull ) ΠΈ LL (ΠΈΠ»ΠΈ ll ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ константу ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ unsigned long long ΠΈΠ»ΠΈ long long .

ΠŸΡ€ΠΈ отсутствии суффикса ( U , u , L , l , LL , ll , ULL ΠΈΠ»ΠΈ ull ),
константС присваиваСтся «наимСньший» ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: short , unsigned short , int , unsigned int , long int , unsigned long int , long long ΠΈΠ»ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ .

Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС:

  • Если константа ΠΈΠΌΠ΅Π΅Ρ‚ суффикс U , Π΅Π΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: unsigned short , unsigned int , unsigned long int .
  • Если константа ΠΈΠΌΠ΅Π΅Ρ‚ суффикс L , Π΅Π΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: long int , unsigned long int .
  • Если константа ΠΈΠΌΠ΅Π΅Ρ‚ суффиксы L ΠΈ U ( LU ΠΈΠ»ΠΈ UL ), Π΅Π΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ unsigned long int .
  • Если константа ΠΈΠΌΠ΅Π΅Ρ‚ LL , Π΅Π΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ long long .
  • Если константа ΠΈΠΌΠ΅Π΅Ρ‚ ULL , Π΅Π΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ .

дСсятичный

Π”ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ дСсятичныС константы ΠΎΡ‚ -9223372036854775808 Π΄ΠΎ 18446744073709551615. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹, ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ эти Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ошибкС Β«Π’Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°Β». ДСсятичныС константы Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ноль. ЦСлочислСнная константа с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π½ΡƒΠ»Π΅ΠΌ интСрпрСтируСтся ΠΊΠ°ΠΊ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Π°Ρ константа.Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ,

  int  i = 10;  / * дСсятичноС 10 * / 
  int  i = 010;  / * дСсятичноС 8 * / 
  int  i = 0;  / * дСсятичный 0 = Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ 0 * /  

Π’ отсутствиС ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΡ… суффиксов Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… дСсятичной константы являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ Π΅Π΅ значСния, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, присвоСнноС константС ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ
<-9223372036854775808 Ошибка: Π²Π½Π΅ допустимого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°!
-9223372036854775808 — -2147483649 Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ
-2147483648 — -32769 Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ
-32768 — -129 Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ
-128-127 ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ
128–255 ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ°
256-32767 Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ
32768-65535 Ρ†Π΅Π»ΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ°
65536-2147483647 Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ
2147483648-4294967295 Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Π±Π΅Π· Π·Π½Π°ΠΊΠ°
4294967296-18446744073709551615 Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ
> 18446744073709551615 Ошибка: Π²Π½Π΅ допустимого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°!

ШСстнадцатСричный

ВсС константы, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с 0x (ΠΈΠ»ΠΈ 0X ), ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ.Π’ отсутствиС ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΡ… суффиксов Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ константы являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ Π΅Π΅ значСния Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ, прСдставлСнными Π²Ρ‹ΡˆΠ΅. НапримСр, 0xC367 Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ unsigned int .

Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ

ВсС константы, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с 0b (ΠΈΠ»ΠΈ 0B ), ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ. Π’ отсутствиС ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΡ… суффиксов Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ константы выводится ΠΈΠ· Π΅Π΅ значСния Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ, прСдставлСнными Π²Ρ‹ΡˆΠ΅.НапримСр, 0b11101 Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ .

Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ

ВсС константы с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π½ΡƒΠ»Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ. Если Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Π°Ρ константа содСрТит нСдопустимыС Ρ†ΠΈΡ„Ρ€Ρ‹ 8 ΠΈΠ»ΠΈ 9, выдаСтся сообщСниС ΠΎΠ± ошибкС. Π’ отсутствиС ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΡ… суффиксов Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ константы выводится ΠΈΠ· Π΅Π΅ значСния Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ, прСдставлСнными Π²Ρ‹ΡˆΠ΅. НапримСр, 0777 Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ int .

Copyright (c) 2002-2012 ΠΌΠΈΠΊΡ€ΠΎΠ­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½ΠΈΠΊΠ°.ВсС ΠΏΡ€Π°Π²Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹.

Π§Ρ‚ΠΎ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎΠ± этой Ρ‚Π΅ΠΌΠ΅? ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π½Π°ΠΌ ΠΎΡ‚Π·Ρ‹Π²!

Π₯ΠΎΡ‚ΠΈΡ‚Π΅ большС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ?

НайдитС ΠΈΡ… Π½Π°

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² C ++: подписанныС, Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅, Π΄Π»ΠΈΠ½Π½Ρ‹Π΅, ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ — Chew Code

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² языкС C ++, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ эти Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ нашСго ΠΊΠΎΠ΄Π°.

Π£ нас Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π² C ++:

  1. с подписью
  2. Π±Π΅Π· Π·Π½Π°ΠΊΠ°
  3. Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ
  4. ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ

Π‘Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ обсудим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ этих ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ².

  1. Если ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ «подписанный» ΠΏΠ΅Ρ€Π΅Π΄ объявлСниСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния. НапримСр: signed int num = -3;
  2. Если ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Β«Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉΒ» ΠΏΠ΅Ρ€Π΅Π΄ объявлСниСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния. НапримСр: unsigned int a = 5;
  3. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… подписаны. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° int a = -10; Π² Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ….
  4. Π­Ρ‚ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… char ΠΈ int. Π˜Ρ… использованиС с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой Π½Π΅ рСкомСндуСтся. Однако ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ long ΠΊ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой.
  5. Β«Π±Π΅Π· Π·Π½Π°ΠΊΠ°Β» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа.
  6. Β«Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉΒ» ΡƒΠ΄Π²Π°ΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ int ΠΈΠ»ΠΈ char.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… прСдставлСна ​​вся информация ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°Ρ… ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°Ρ….

1. ЦСлочислСнный Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…

Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ с использованиСм Β«shortΒ», Β«longΒ» ΠΈΠ»ΠΈ просто Β«intΒ».

НапримСр: short int a = 3; Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ int b = 62220;

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ short a = 3; ΠΈΠ»ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ b = 62220;

Π’ΠΠ‘Π›Π˜Π¦Π 1: ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ

[su_table]

Π’ΠΈΠΏ Π Π°Π·ΠΌΠ΅Ρ€ Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½
ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ 2 Π±Π°ΠΉΡ‚Π°-32768 Π΄ΠΎ 32767
ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ° 2 Π±Π°ΠΉΡ‚Π° 0 Π΄ΠΎ 65535
подписанный ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ 2 Π±Π°ΠΉΡ‚Π°-32768 Π΄ΠΎ 32767

[/ su_table]

Π’ΠΠ‘Π›Π˜Π¦Π 2: int

int ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ 2 ΠΈΠ»ΠΈ 4 Π±Π°ΠΉΡ‚Π° Π² зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ систСмы.

[su_table]

Π’ΠΈΠΏ Π Π°Π·ΠΌΠ΅Ρ€ Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½
Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ 2 ΠΈΠ»ΠΈ 4 Π±Π°ΠΉΡ‚Π°-32768 Π΄ΠΎ 32767 (2 Π±Π°ΠΉΡ‚Π°)
-2 147 483 648 Π΄ΠΎ 2 147 483 647 (4 Π±Π°ΠΉΡ‚Π°)
Ρ†Π΅Π»ΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ° 2 ΠΈΠ»ΠΈ 4 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 0 Π΄ΠΎ 65 535 (2 Π±Π°ΠΉΡ‚Π°)
ΠΎΡ‚ 0 Π΄ΠΎ 4 294 967 295 (4 Π±Π°ΠΉΡ‚Π°)
подписано int 2 ΠΈΠ»ΠΈ 4 Π±Π°ΠΉΡ‚Π° -32768 Π΄ΠΎ 32767 (2 Π±Π°ΠΉΡ‚Π°)
-2 147 483 648 Π΄ΠΎ 2 147 483 647 (4 Π±Π°ΠΉΡ‚Π°)

[/ su_table]

Π’ΠΠ‘Π›Π˜Π¦Π 3: Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ

[su_table]

Π’ΠΈΠΏ Π Π°Π·ΠΌΠ΅Ρ€ Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½
Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ 4 Π±Π°ΠΉΡ‚Π° -2 147 483 648 Π΄ΠΎ 2 147 483 647
Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ° 4 Π±Π°ΠΉΡ‚Π° 0 Π΄ΠΎ 4 294 967 295
подписанный Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ 4 Π±Π°ΠΉΡ‚Π° -2 147 483 648 Π΄ΠΎ 2 147 483 647

[/ su_table]

2.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *