рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореЗрд░реЗ рдЫрд╛рддреНрд░ рдФрд░ рдореИрдВрдиреЗ рд╕реА рдорд╛рдирдХ рдореЗрдВ рдПрдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛, рдЕрд░реНрдерд╛рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗред
рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд▓рд┐рдЦрд╛:
int foo (char x) { char y = x; return ++x > y; }
рдЪреВрдВрдХрд┐
++x
1 рд╕реЗ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдзрд┐рдХрд╛рдВрд╢
x
рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП "
1 " рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓реНрдп CHAR_MAX рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛?
рдПрдХ рдзрд╛рд░рдгрд╛ рдпрд╣ рдереА рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ "
0 " рд▓реМрдЯрд╛рдПрдЧрд╛ред рдПрдХ рдФрд░ рдпрд╣ рд╣реИ рдХрд┐
++x
рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рдЪрд╛рд░реНрдЯ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдХрд░реНрд╖ рдореБрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ
x
:
int main (void) { int i; for (i=CHAR_MIN; i<=CHAR_MAX; i++) { printf ("%d ", foo(i)); if ((i&31)==31) printf ("\n"); } return 0; }
рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ рдЙрди рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ char рдЗрдВрдЯ рд╕реЗ рдХрдо рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдРрд╕реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдирд╣реАрдВ рджреЗрдЦреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╡рд┐рдкрд░реАрдд рд╣реБрдЖ рд╣реЛред
рдЬрдм рдореИрдВрдиреЗ рдХреНрд▓реИрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рддреЛ рдкрд╣рд▓реА рдЕрд▓рд╛рд░реНрдо рдШрдВрдЯреА рдмрдЬреА:
regehr@home:~$ clang -O foo.c -o foo regehr@home:~$ ./foo 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
рдПрдХ рдмрд░реНрдл рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рдЗрдХрд╛рдИ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рддрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ рдХреНрд▓реИрдВрдЧ (2.7) рдХреЗ рдПрдХ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдирд╡реАрдирддрдо рд╕реНрдиреИрдкрд╢реЙрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ (126534 рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ) (
рдЕрдиреБрдЪреНрдЫреЗрдж 3 рдорд╛рд░реНрдЪ 2011 рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ - рд▓рдЧрднрдЧ рдкреНрд░рддрд┐ред ):
regehr@home:~$ clang -O0 overflow.c -o overflow regehr@home:~$ ./overflow 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 regehr@home:~$ clang -O1 overflow.c -o overflow regehr@home:~$ ./overflow 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
рдЕрдВрддрд┐рдо рд╕рдВрдХреЗрдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдЬрдм рд╣рдордиреЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╕реНрддрд░ рдХреЛ рдмрджрд▓рд╛ рддреЛ рдкрд░рд┐рдгрд╛рдо рдмрджрд▓ рдЧрдпрд╛ - рдмрдврд╝реЗ рд╣реБрдП CHAR_MAX рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рддреЛ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдПрдХ рд╕рдВрдХрд▓рдХ рддреНрд░реБрдЯрд┐ рд╣реИред
рдЗрдВрдЯреЗрд▓ рд╕реА рдХрдВрдкрд╛рдЗрд▓рд░ (x86-64 рдХреЗ рд▓рд┐рдП 12.0.2) рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛:
[regehr@bethe ~]$ icc -O0 foo.c -o foo [regehr@bethe ~]$ ./foo 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 [regehr@bethe ~]$ icc -O foo.c -o foo [regehr@bethe ~]$ ./foo 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
рдЬреАрд╕реАрд╕реА рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг (x86 рдХреЗ рд▓рд┐рдП 170512 рдХрд╛ рд░рд┐рд╡реНрдпреВ) рдПрдХ рд╕реНрдерд┐рд░ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:
regehr@home:~$ current-gcc -O0 foo.c -o foo regehr@home:~$ ./foo 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 regehr@home:~$ current-gcc -O2 foo.c -o foo regehr@home:~$ ./foo 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рд╣рдо рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдлрдВрдХреНрд╢рди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ рддреЛ рдХрд╣рд╛рдиреА рдмрджрд▓ рдЬрд╛рддреА рд╣реИ:
regehr@home:~$ current-gcc -O2 -fno-inline foo.c -o foo regehr@home:~$ ./foo 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
рддрдм рдореИрдВрдиреЗ рдХреЙрдореНрдкрд░реНрдЯ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рд╕реНрдерд┐рддрд┐ рдиреЗ рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдореЛрдбрд╝ рд▓рд┐рдпрд╛:
regehr@home:~$ ccomp foo.c -o foo regehr@home:~$ ./foo 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
рдпрд╣ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЙрдореНрдкрд░реНрдЯ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╕реА рднрд╛рд╖рд╛ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕рд┐рджреНрдз рд╕рдВрд╕реНрдХрд░рдг рд╣реИ - рдпрд╣ рдЙрдирдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐
foo()
рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЬрдм рд╕реЗ
char
рдкреНрд░рдХрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
int
рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, рдФрд░ рдЬрдм
x
рд╕рд╛рдЗрди рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ рдФрд░ рдорд╛рди
CHAR_MAX
,
++x
рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ANSI C рдФрд░ C99 рджреЛрдиреЛрдВ рдорд╛рдирдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рдорд╛рдирдХ рдкрдврд╝рддрд╛ рд╣реИ: "рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
++E
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (E+=1)
ред" - рдорд╛рдирдХ рдкрдврд╝рддрд╛ рд╣реИ: "
E1 op= E2
рдХреЗ рд░реВрдк рдореЗрдВ рдпреМрдЧрд┐рдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ E1 = E1 op (E2)
рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЪрд░ E1
рдЧрдгрдирд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИред" - рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди "
E1 op E2
" рдХреЗ рджрд╛рдИрдВ рдУрд░ "рд╕рд╛рдорд╛рдиреНрдп рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд░реВрдкрд╛рдВрддрд░рдг" рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред - рдкрд░рдореНрдкрд░рд╛рдЧрдд рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ + рд╕рдВрдЪрд╛рд▓рдХ рдХреЗ
signed char
рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ signed int
рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред - рдЪреВрдВрдХрд┐ рдЗрдВрдЯ рдЪрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рд╣реА рд╕рдВрдХрд▓рдХ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
++x > y
рдЬрдм рджреЛрдиреЛрдВ рдЪрд░ рдкреНрд░рдХрд╛рд░ "
signed char
" рдХреЗ рдЪрд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдореВрд▓реНрдп
CHAR_MAX
:
- рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ 127 рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЧрдП int 127 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ;
- рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЗрдВрдЯ 127 рдПрдХ рдХреА рд╡реГрджреНрдзрд┐ рд╣реБрдИ, рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЗрдВрдЯ 128 рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛;
- рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЧрдП int 128 рдХреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд char -128 рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣
x
рдХрд╛ рдирдпрд╛ рдорд╛рди рд╣реИ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ ++x
(рдиреЛрдЯ: рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП); - рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд char -128 рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд int -128 рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ;
- рддреБрд▓рдирд╛-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд int -128> рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд int 127 рд░рд┐рдЯрд░реНрди " 0 "ред
рддреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд╛рд░ рд╕рдВрдХрд▓рдХ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ?
- рдЬреАрд╕реАрд╕реА рдореЗрдВ, рдПрдХ рдмрдЧ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
- LLVM / Clang рдореЗрдВ, рдмрдЧ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди 24 рдШрдВрдЯреЛрдВ рдХреЗ рднреАрддрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред
- рдЗрдВрдЯреЗрд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рднреА рддреНрд░реБрдЯрд┐ рд╣реИред
- CompCert рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ рдХреА рдЕрдкрдиреА рдкрд░рд┐рднрд╛рд╖рд╛ рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдорд╛рди CHAR_MIN рдФрд░ CHAR_MAX рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдирдХреНрд╕ рдорд╢реАрди рдкрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВред рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рдЙрд╕рдХреЗ рдкреВрд░реЗ рд╡рд╛рддрд╛рд╡рд░рдг (рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реНрд╕, рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЕрд╕реЗрдореНрдмрд▓рд░реНрд╕, рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░реЛрд╕реЗрд╕ рдЖрджрд┐) рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдПрдХ рдЧрдВрднреАрд░ рдФрд░ рдЦреБрд▓реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдореВрд▓ рд▓реЗрдЦ -
blog.regehr.org/archives/482