рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдкреНрд░рд╛рдердорд┐рдХ C / C ++: рд╣реЛ рд╕рдХрддрд╛ рд╣реИ-> рд╣реИ

рдкрд╛рдВрдЪ рдкреНрд░рд╢реНрди: рдпрд╣ рд╕рд░рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрдпрд╛ рдЫрд╛рдкрддрд╛ рд╣реИ:
#include <stdio.h> typedef int a; ab = 5; int main() { a(b); printf("%d\n", b); return 0; } 
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреА рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛ рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рд╕рднреА gcc рдмрд╛рдЗрд╕рди рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд╡реЗ рдкрдХрдбрд╝ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВрдЧреЗ - рдФрд░ рдареАрдХ рд╣реА рддреЛред рд╕рдВрдХреЗрдд рд╕рдВрдЦреНрдпрд╛ рд╢реВрдиреНрдп: рдпрд╣ C ++ рдЦрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рджрд╛ C рдЪреЛрдХ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд╕рдВрдХреЗрдд рдПрдХред рдпрд╣рд╛рдБ рд╡рд╣ рдХреНрдпрд╛ рдЫрдкреЗрдЧреА:
рдЕрдХреНрд╖compilersрдкрд░рд┐рдгрд╛рдо
рдЖрд░реНрдЪреНрд▓рд┐рдирдХреНрд╕ 64рдХреНрд▓реИрдВрдЧ 2.9, рдЬреАрд╕реАрд╕реА 4.5.20
рд╡рд┐рди 7 32рд╡рд┐рдЬреБрдЕрд▓ C ++ 2005, 2008, 20101
рд▓реЗрдХрд┐рди рдЕрдм рдХреЗрд╡рд▓ рдпрд╣ рд╕рд╡рд╛рд▓ рдЕрд▓рдЧ рд╣реИ: a(b) рдХреНрдпрд╛ рд╣реИ? рдЖрдЦрд┐рд░рдХрд╛рд░, рдореИрдВрдиреЗ рдЪрд╛рдмрд┐рдпрд╛рдБ рдмрджрд▓ рджреАрдВ: рд╕реА ++ рдФрд░ рд╕реА рджреЛрдиреЛрдВ рд╕рднреА рдПрдХ рд╣реИрдВред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ: рдХреНрд▓реИрдВрдЧ рдФрд░ рдЬреАрд╕реАрд╕реА рдкреНрд░рд┐рдВрдЯ рд╡рди (0), рдФрд░ рд╡рд┐рдЬреБрдЕрд▓реНрд╕ рдЕрдиреНрдп (1)ред

рдпрд╣рд╛рдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЦрддреНрдо рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд╣реАрдВ? рд╕рдВрдХреЗрдд рджреЛ: рд╢реЛрд░ рдХреЛ рджреВрд░ рдХрд░реЗрдВ, рдФрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ:
  int(b); 
рд╕рдВрдХреЗрдд рджреЛ ++ ред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд╕реНрдЯ рдЖрд╕рд╛рдиреА рд╕реЗ рдЦрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдИрдВ рдУрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм Microsoft рдПрдХ рд╢реВрдиреНрдп рд▓реМрдЯрд╛рдПрдЧрд╛:
  int(b) = 0; 
рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ 45 рдорд┐рдирдЯ рдХреА рдХреИрдж рд╣реЛрддреА рд╣реИ, рд╡реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рдЙрдиреНрд╣реЛрдВрдиреЗ http://ideone.com рдореЗрдВ рдХреЛрдб рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рд╕реАрдзреЗ рдмрдлрд░ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ - рдХреНрдпрд╛ рд╣рдо xsel рдкрд░ xsel рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ? рдЗрд╕ рддрд░рд╣ рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо-рд╕рдХреНрд╖рдо рддреАрди рд╕рдВрдХреЗрдд рд╣реИ :
    [aviaconstructor @ arch64 tmp] # xsel |  gcc -xc ++ -рд╡реИрд▓ -
    <stdin>: рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ 'int main ()':
    <stdin>: 9: 25: рдЪреЗрддрд╛рд╡рдиреА: 'b' рдХрд╛ рдкреНрд░рдпреЛрдЧ рдЗрд╕ рдлрдВрдХреНрд╢рди рдореЗрдВ uninitialized рд╣реИ
рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд░рд▓ рд╣реИ, рдХреНрдпрд╛ C ++ 11 рдпрд╣рд╛рдБ рд╣реИ! рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдиреЗ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░реНрд░реЗрд╕реНрдХреБ рдХреА рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреА рдФрд░ рд╕реА рдХреА рдкрд╡рд┐рддреНрд░ рд╕рд╛рджрдЧреА рд╕реЗ рджреВрд░ рднрд╛рдЧрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рднрд░рддрд╛ рд╣реВрдВред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЯрд╛рдЗрдк рдФрд░ рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рд┐рдВрдЧрд▓ рд╕реНрдкреЗрд╕ рд░рдЦрд╛ред рд╕рдмрд╕реЗ рдЕрдЪреВрдХ рдХреЗ рд▓рд┐рдП, рд╕рдВрдХреЗрдд рдЪрд╛рд░ (рдкрд╛рдВрдЪ, рдЕрдЧрд░ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ):
  int (b); 
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдорд╛рд░реА рдХрд╣рд╛рдиреА рдореЗрдВ, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ a(b) рдпрд╛ int(b) рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдШреЛрд╖рдгрд╛ рд╣реИ, рдЬреЛ int b рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣ рдЙрд╕рдХреЗ рд╕реНрддрди рдХреЗ рд╕рд╛рде рд╣реИ рдХрд┐ рд╡рд╣ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдо рдЧрдкрд╢рдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдордЬрд╝реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:рд╡реИрд╕реЗ, рдпрджрд┐ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рддреЛ рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдЪрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рдмреЗрд╢рдХ, рдХреЗрд╡рд▓ рд╢реВрдиреНрдп рдФрд░ рд╡рд╛рд▓реЗ рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдВ рдФрд░ рдЕрдм рд╣рдо рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдЧрд░ рдпрд╣ рдЖрдХреНрд░рд╛рдордХ рд░реВрдк рд╕реЗ рджреЗрд░ рд╕реЗ рд╣реБрдЖ, рддреЛ рдорд╛рдирд╡рддрд╛ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдПрдХ рдЕрдЪреНрдЫреЗ рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реА рдФрд░ рд╕реА ++ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЬреЛ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдлрд┐рд░: a(b) рд╕реА ++ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдбрд╛рд▓реА рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЪрд░ рдШреЛрд╖рдгрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рдХрд╛ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╣рдорд╛рд░реА рдкреЛрд╕реНрдЯ рдХреЗ рд╢реАрд░реНрд╖рдХ рдХрд╛ рднреА рд╕реБрд░рд╛рдЧ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЗрд╕рдореЗрдВ рдЬреЛ рддреАрд░ рд╣реИ, рд╡рд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

рдпрд╣ рд╕рдм рдПрдХ рдЕрд╢реБрджреНрдз рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╣реЛрдЧреА, рдЬрдм рд╣рдо, рд╕реНрдорд╛рд░реНрдЯ, рдХреЛрдб рдХреЗ рд╕рд╛рде рд░реЗрдВрдЧрддреЗ рд╣реИрдВ, рдареАрдХ рд╣реИ, рдХреЗрд╡рд▓ рдмрд╣реБрдд рд╣реА рд╕реНрдорд╛рд░реНрдЯ рдХреАрдбрд╝реЗред рдпрд╣рд╛рдБ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рд╣реИ:
  std::string a("my string"); std::string b(); 
рджреЛ рд▓рд╛рдЗрдиреЗрдВ рдФрд░ рдПрдХ рдЦрд╛рд▓реА? рдиреА-fi-рд╣рд╛! рджреВрд╕рд░рд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд░рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди b рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╢рдкрде рд▓реЗрдВ, рдзрдиреНрдпрд╡рд╛рдж рднрдЧрд╡рд╛рди! рдмрд╣реБрдд рдмреБрд░рд╛ рдЬрдм рд╡реЗ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдЪрд╛рд╣рддреЗ рдереЗ:
  QMutexLocker lock(&globalLock); 
рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рдХрд▓рд╛:
  void MyClass::MyFunc() { QMutexLocker lock(); // ? ThisFuncShallBeProtectedByGlobalLock(); ++objectVarCounter; } 
рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рднреА рдирд╣реАрдВ рдорд┐рд▓реА - рдЬрд░рд╛ рд╕реЛрдЪрд┐рдП, рдПрдХ рдЕрдкреНрд░рдпреБрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛! рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреЗрд╡рд▓ рддрд╛рд▓рд╛ рдХреЗ рдмрд┐рдирд╛ (рд╢рд┐рд╢рдХреЛрд╡, рдореБрдЭреЗ рдирд┐рд░рдВрддрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ)ред рдЪрд░рдо рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЪрд░ рдШреЛрд╖рдгрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЬрд╛рдо рд╣реИ:
  { QMutexLocker(&globalLock); //  ? ... 
рдХреНрдпрд╛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд▓реЙрдХрд░ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд▓рд┐рдП рд╣реА рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛? рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд░реА рдХрдерд╛ рднреА рд╣реИ: рдЪреВрд╣реЗ рдиреЗ рджреМрдбрд╝ рд▓рдЧрд╛рдИ, рдЕрдкрдиреА рдкреВрдБрдЫ рдХреЛ рдШреБрдорд╛рдпрд╛ - рдмреАрдбреАрдПрдо - рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХреЛ рдЧрд▓рдд рдЬрдЧрд╣ рдкрд░ рд░реМрдВрдж рджрд┐рдпрд╛:
  MyEnum myEnumMask ; MyEnum(i); 
рдирд╣реАрдВ, рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╡рдВрдЪрд┐рдд рд╣реИ! рдХреБрдЯрд┐рд▓ рдЯрдЯреНрдЯреВ рдХреЗ рд╕рд╛рде, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреБрдЫ рдЧрд▓рдд рд▓рд┐рдЦрд╛ рд╣реИ - рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЦреИрд░, рд╣рд╛рдБ, рд╣рд╛рдБред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рд╣рд░ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рд▓реЗрдХрд┐рди рдореЗрд░реА рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛ рдореЗрд░реА рджреБрд╢реНрдорди рд╣реИред рд╕рд╛рд╡рдзрд╛рди!

Source: https://habr.com/ru/post/In117596/


All Articles