2019 рдореЗрдВ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╢реАрд░реНрд╖ 10 рдХреАрдбрд╝реЗ рдорд┐рд▓реЗ

рдЪрд┐рддреНрд░ 7

рдПрдХ рдФрд░ рд╕рд╛рд▓ рдХрд╛ рдЕрдВрдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЦреБрдж рдХреЛ рдПрдХ рдХрдк рдХреЙрдлреА рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рд╕рд╣реА рд╕рдордп рд╣реИ рдФрд░ рдЗрд╕ рд╡рд░реНрд╖ рдХреЗ рджреМрд░рд╛рди рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдПрдХрддреНрд░ рдХреА рдЧрдИ рдмрдЧреНрд╕ рдХреА рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдирд╛ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдлреА рд╕рдордп рд▓рдЧреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдЖрдЬ рд╣рдо рдЙрди рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд▓реЗ рдзрдмреНрдмреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╣рдордиреЗ 2019 рдореЗрдВ рдУрдкрди-рд╕реЛрд░реНрд╕ C / C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдХрд┐рдП рдереЗред

рдирд╣реАрдВред 10. рд╣рдо рдХрд┐рд╕ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ?


V1040 рдкреВрд░реНрд╡-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореИрдХреНрд░реЛ рдирд╛рдо рдХреА рд╡рд░реНрддрдиреА рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдЯрд╛рдЗрдкреЛред '__MINGW32_' рдореИрдХреНрд░реЛ '__MINGW32__' рдХреЗ рд╕рдорд╛рди рд╣реИред рд╡рд┐рдирд╛рдкреА.рд╣ 4112

#if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif 

__MINGW32 _ рдореИрдХреНрд░реЛ рдХреЗ рдирд╛рдо рд╕реЗ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ (MINGW32 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ __MINGW32__ рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрдиреНрдпрддреНрд░, рдЬрд╛рдБрдЪ рд╕рд╣реА рд▓рд┐рдЦреА рдЧрдИ рд╣реИ:

рдЪрд┐рддреНрд░ 3


рд╡реИрд╕реЗ, рдпрд╣ рдмрдЧ рди рдХреЗрд╡рд▓ " рд╕реАрдореЗрдХ: рдХреЗрд╕: рдЬрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдЕрдХреНрд╖рдореНрдп рд╣реИ " рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ рдерд╛, рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ V1040 рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрджреНрд╡рд╛рд░рд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ рдерд╛ (19 рдЕрдЧрд╕реНрдд) , 2019)ред

рдирд╣реАрдВред 9. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдХреМрди?


V502 рд╢рд╛рдпрдж '?:' рдСрдкрд░реЗрдЯрд░ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред '?:' рдСрдкрд░реЗрдЯрд░ рдХреА '==' рдСрдкрд░реЗрдЯрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред mir_parser.cpp 884

 enum Opcode : uint8 { kOpUndef, .... OP_intrinsiccall, OP_intrinsiccallassigned, .... kOpLast, }; bool MIRParser::ParseStmtIntrinsiccall(StmtNodePtr &stmt, bool isAssigned) { Opcode o = !isAssigned ? (....) : (....); auto *intrnCallNode = mod.CurFuncCodeMemPool()->New<IntrinsiccallNode>(....); lexer.NextToken(); if (o == !isAssigned ? OP_intrinsiccall : OP_intrinsiccallassigned) { intrnCallNode->SetIntrinsic(GetIntrinsicID(lexer.GetTokenKind())); } else { intrnCallNode->SetIntrinsic(static_cast<MIRIntrinsicID>(....)); } .... } 

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:

 if (o == !isAssigned ? OP_intrinsiccall : OP_intrinsiccallassigned) { .... } 

'==' рдСрдкрд░реЗрдЯрд░ рдХреА рдкреВрд░реНрд╡рддрд╛ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ (? :)ред рдЗрд╕рд▓рд┐рдП, рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдЧрд▓рдд рдХреНрд░рдо рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:

 if ((o == !isAssigned) ? OP_intrinsiccall : OP_intrinsiccallassigned) { .... } 

рдЪреВрдВрдХрд┐ рд╕реНрдерд┐рд░рд╛рдВрдХ OP_intrinsiccall рдФрд░ OP_intrinsiccallassigned рдЧреИрд░-рдЕрд╢рдХреНрдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рд╣рд░ рд╕рдордп рд╕рд╣реА рд╣реЛ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рджреВрд╕рд░реА рд╢рд╛рдЦрд╛ рдХрд╛ рд╢рд░реАрд░ рдЕрдиреБрдкрдпреЛрдЧреА рдХреЛрдб рд╣реИред

рдЗрд╕ рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди " Huawei рджреНрд╡рд╛рд░рд╛ рдЖрд░реНрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдУрдкрди-рд╕реЛрд░реНрд╕ рдХреА рдЬрд╛рдБрдЪ " рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдирд╣реАрдВред 8. рдЦрддрд░рдирд╛рдХ рдмрд┐рдЯрд╡рд╛рдЗрдЬ рдСрдкрд░реЗрд╢рди


V1046 рдмреВрд▓ рдХрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдкрдпреЛрдЧ 'рдФрд░' int 'рдСрдкрд░реЗрд╢рди рдореЗрдВ рдПрдХ рд╕рд╛рде' & = 'ред GSLMultiRootFinder.h 175

 int AddFunction(const ROOT::Math::IMultiGenFunction & func) { ROOT::Math::IMultiGenFunction * f = func.Clone(); if (!f) return 0; fFunctions.push_back(f); return fFunctions.size(); } template<class FuncIterator> bool SetFunctionList( FuncIterator begin, FuncIterator end) { bool ret = true; for (FuncIterator itr = begin; itr != end; ++itr) { const ROOT::Math::IMultiGenFunction * f = *itr; ret &= AddFunction(*f); } return ret; } 

рдХреЛрдб рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ SetFunctionList рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╕реВрдЪреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ ред рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдЕрдорд╛рдиреНрдп рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдЧрд▓рдд рд╣реИ , рдпрд╛ рдЕрдиреНрдпрдерд╛ рд╕рддреНрдп рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, SetFunctionList рдлрд╝рдВрдХреНрд╢рди рдорд╛рдиреНрдп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЧрд▓рдд рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдХреНрдпреЛрдВ ред AddFunction рдлрд╝рдВрдХреНрд╢рди рдиреЗ fFunctions рд╕реВрдЪреА рдореЗрдВ рдорд╛рдиреНрдп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛ рджреА рд╣реИред рдпрд╣реА рд╣реИ, рдЧреИрд░-рд╢реВрдиреНрдп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╕реВрдЪреА рдЖрдХрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рдХрд╛рд░рдг рд╣реЛрдЧреА: 1, 2, 3, 4, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдмрдЧ рдЦреЗрд▓рдиреЗ рдореЗрдВ рдЖрддрд╛ рд╣реИ:

 ret &= AddFunction(*f); 

рдЪреВрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдмреВрд▓ рдХреА рдмрдЬрд╛рдп рдЯрд╛рдЗрдк рдЗрдВрдЯ рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП '& =' рдСрдкрд░реЗрд╢рди рднреА рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдПрдХ рд╕реВрдХреНрд╖реНрдо рдмрдЧ рд╕реЗрдЯрдлрдВрдХреНрд╢рдВрд╕ рдХреЗ рд░рд┐рдЯрд░реНрди рдореВрд▓реНрдп рдХреЛ рддрдм рднреА рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЗрд╕рдХреЗ рддрд░реНрдХ рдорд╛рдиреНрдп рд╣реЛрдВред

рдпрджрд┐ рдЖрдк рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝ рд░рд╣реЗ рдереЗ (рдФрд░ рдЖрдк рдереЗ, рддреЛ рдЖрдк рдирд╣реАрдВ рдереЗ?), рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рд╕реЗ рдЖрдпрд╛ рд╣реИред рд╣рд╛рдВ, рд╣рдордиреЗ рдЗрд╕реЗ рднреА рдЪреЗрдХ рдХрд┐рдпрд╛: " ROOT рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдлреНрд░реЗрдорд╡рд░реНрдХ ред"

рдирд╣реАрдВред 7. рдЪрд░ рдХреЛ рдорд┐рд▓рд╛рдпрд╛


V1001 [CWE-563] 'рдореЛрдб' рд╡реЗрд░рд┐рдПрдмрд▓ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред SIModeRegister.cpp 48

 struct Status { unsigned Mask; unsigned Mode; Status() : Mask(0), Mode(0){}; Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) { Mode &= Mask; }; .... }; 

рдХрдХреНрд╖рд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдорд┐рд╢реНрд░рдг рдХрд░рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдВ рднреА рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реБрдЖред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ:

 Mode &= Mask; 

рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рддрд░реНрдХ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдмрд╛рдд рд╣реИред рдЗрд╕ рддрд░реНрдХ рдХрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд╢рд╛рдпрдж рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдерд╛:

 Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) { this->Mode &= Mask; }; 

рдпрд╣ рдмрдЧ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╣рд░ рдмрд╛рд░ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдкрд░рдВрдкрд░рд╛ рд╣реИред рдЗрд╕ рд╕рд╛рд▓ рд╣рдордиреЗ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдФрд░ рдЪреЗрдХ рдХрд┐рдпрд╛ред

рдирд╣реАрдВред 6. C ++ рдХреЗ рдЕрдкрдиреЗ рдХрд╛рдиреВрди рд╣реИрдВ


рдпрд╣ рдмрдЧ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЙрдкрдЬрд╛ рд╣реИ рдХрд┐ C ++ рдирд┐рдпрдо рд╣рдореЗрд╢рд╛ рдЧрдгрд┐рддреАрдп рдирд┐рдпрдореЛрдВ рдпрд╛ "рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди" рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЫреЛрдЯреЗ рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рд╕реНрд╡рдпрдВ рдмрдЧ рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

V709 рд╕рдВрджрд┐рдЧреНрдз рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛: 'f0 == f1 == m_fractureBodies.size ()'ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ 'a == b == c' 'a == b && b == c' рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИред btFractureDynamicsWorld.cpp 483

 btAlignedObjectArray<btFractureBody*> m_fractureBodies; void btFractureDynamicsWorld::fractureCallback() { for (int i = 0; i < numManifolds; i++) { .... int f0 = m_fractureBodies.findLinearSearch(....); int f1 = m_fractureBodies.findLinearSearch(....); if (f0 == f1 == m_fractureBodies.size()) continue; .... } .... } 

рд╕реНрдерд┐рддрд┐ рдпрд╣ рдЬрд╛рдВрдЪ рд░рд╣реА рд╣реИ рдХрд┐ f0 f1 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдФрд░ m_fractureBodies рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд╕рдВрднрд╡рддрдпрд╛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐ f0 рдФрд░ f1 m_fractureBodies рд╕рд░рдгреА рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ findLinearSearch () рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рд╕реНрдерд┐рддрд┐ рд░рдЦрддреЗ рд╣реИрдВ ред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬрд╛рдБрдЪрддреА рд╣реИ рдХрд┐ f0 f1 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдФрд░ рдпрджрд┐ m_fractureBodies.size () рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ f0 == f1 рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣рд╛рдВ рддреАрд╕рд░реЗ рдСрдкрд░реЗрдВрдб рдХреЛ 0 рдпрд╛ 1 рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрдЧ рд╣реИ! рдФрд░, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдмрд╣реБрдд рд╣реА рджреБрд░реНрд▓рднред рдЕрдм рддрдХ рд╣рдордиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рддреАрди рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ, рдФрд░, рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рддреАрдиреЛрдВ рдЧреЗрдо рдЗрдВрдЬрди рдереЗред рдпрд╣ рдмреБрд▓реЗрдЯ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХрдорд╛рддреНрд░ рдмрдЧ рдирд╣реАрдВ рд╣реИ; рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ " рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд░реЗрдб рдбреЗрдб рд░рд┐рдбреЗрдореНрдкрд╢рди рдХреЗ рдмреБрд▓реЗрдЯ рдЗрдВрдЬрди рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ " рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдирд╣реАрдВред 5. рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреНрдпрд╛ рд╣реИ?


рдпрд╣ рдПрдХ рдЖрд╕рд╛рди рд╣реИ рдпрджрд┐ рдЖрдк рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВред

V739 рдИрдУрдПрдл рдХреА рддреБрд▓рдирд╛ 'рдЪрд╛рд░' рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдп рд╕реЗ рдирд╣реАрдВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред 'Ch' 'int' рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред json.cpp 762

 void JsonIn::skip_separator() { signed char ch; .... if (ch == ',') { if( ate_separator ) { .... } .... } else if (ch == EOF) { .... } 

рдпрд╣ рдЙрди рдмрдЧреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдИрдУрдПрдл рдХреЛ -1 рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдЪрд╛рд░реНрдЯ рдХреЗ рдЪрд░ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдерд┐рддрд┐ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реЛрдЧреА ред рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж 0xFF (255) рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд░реНрдг рд╣реИред рдЬрдм рдИрдУрдПрдл рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рдЪрд░рд┐рддреНрд░ -1 рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╕реНрдерд┐рддрд┐ рд╕рд╣реА рд╣реЛ рдЬрд╛рдПрдЧреАред

рдЗрд╕ рд╕рд╛рд▓ рдХреЗ рд╢реАрд░реНрд╖ 10 рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреАрдбрд╝реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдЧреЗрдорд┐рдВрдЧ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдкрд╛рдП рдЧрдП: рдЗрдВрдЬрди рдпрд╛ рдУрдкрди-рд╕реЛрд░реНрд╕ рдЧреЗрдореНрд╕ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдерд╛, рдпрд╣ рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рднреА рдЖрдпрд╛ рдерд╛ред " рдХреИрдЯреИрдХреНрд╕реНрд▓рд╛рдЗрдо рдбрд╛рд░реНрдХ рдбреЗрдЬрд╝ рдЕрд╣реЗрдб: рд╕реНрдЯреЗрдЯрд┐рдХ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдПрдВрдб рд░реЛрдЬреБрд▓рд╛рдЗрдХ рдЧреЗрдореНрд╕ " рд▓реЗрдЦ рдореЗрдВ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдирд╣реАрдВред 4. рдЬрд╛рджреВ рдирд┐рд░рдВрддрд░ рдкрд╛рдИ


V624 '3.141592538' рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рдПрдХ рдЧрд▓рддрдлрд╣рдореА рд╣реИред <Math.h> рд╕реЗ M_PI рдирд┐рд░рдВрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред PhysicsClientC_API.cpp 4109

 B3_SHARED_API void b3ComputeProjectionMatrixFOV(float fov, ....) { float yScale = 1.0 / tan((3.141592538 / 180.0) * fov / 2); .... } 


рдкрд╛рдИ рдирдВрдмрд░ (3,141592653 ...) рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдЯрд╛рдЗрдкреЛ рд╣реИ: 7 рд╡реЗрдВ рджрд╢рдорд▓рд╡ рд╕реНрдерд╛рди рдкрд░ "6" рдирдВрдмрд░ рдЧрд╛рдпрдм рд╣реИред

рдЪрд┐рддреНрд░ 4
рдПрдХ рдЧрд▓рдд рджрд╕ рд▓рд╛рдЦрд╡рд╛рдВ рджрд╢рдорд▓рд╡ рдЕрдВрдХ рд╢рд╛рдпрдж рд╣реА рдХрд┐рд╕реА рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдиреБрдХрд╕рд╛рди рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдореМрдЬреВрджрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЬрд┐рд╕рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Pi рдирдВрдмрд░, рд╣реЗрдбрд░ math.h рд╕реЗ рдирд┐рд░рдВрддрд░ M_PI рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдк рдЗрд╕ рдмрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рд▓реЗрдЦ " рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд▓реБрдХ рдЗрди рдж рд░реЗрдб рдбреЗрдб рд░рд┐рдбреЗрдореНрдкрд╢рди рдХреЗ рдмреБрд▓реЗрдЯ рдЗрдВрдЬрди " рдореЗрдВ рдкрдврд╝ рдЪреБрдХреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдЫрдард╛ рд╕реНрдерд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХрд╛ рдЕрдВрддрд┐рдо рдореМрдХрд╛ рд╣реИред

рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдореЛрдбрд╝


рд╣рдо рд╢реАрд░реНрд╖ 3 рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреАрдбрд╝реЗ рдХреЗ рдкрд╛рд╕ рдЖ рд░рд╣реЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рд╣реИ, рдореИрдВ рдмрдЧ рдХреЛ рдЙрдирдХреЗ рдкреНрд░рднрд╛рд╡ рд╕реЗ рдирд╣реАрдВ рд╕реБрд▓рдЭрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкреНрд░рдпрд╛рд╕ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирд╡ рд╕рдореАрдХреНрд╖рдХ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдкрд░ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рд▓рд╛рдн рдореВрд▓ рд░реВрдк рд╕реЗ рдердХрд╛ рджреЗрдиреЗ рдпрд╛ рдЪреАрдЬреЛрдВ рдХреЛ рднреВрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЯреВрд▓ рдХреА рдЕрдХреНрд╖рдорддрд╛ рд╣реИред :)

рдЕрдм, рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЯреЙрдк 3 рдореЗрдВ рдХреНрдпрд╛ рд╣реИред

рдЪрд┐рддреНрд░ 8


рдирд╣реАрдВред 3. рдПрдХ рдорд╛рдпрд╛рд╡реА рдЕрдкрд╡рд╛рдж


V702 рдХрдХреНрд╖рд╛рдПрдВ рд╣рдореЗрд╢рд╛ std :: рдЕрдкрд╡рд╛рдж (рдФрд░ рдПрдХ рдЬреИрд╕реЗ) рд╕реЗ 'рдкрдмреНрд▓рд┐рдХ' рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд╛рд▓реА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП (рдХреЛрдИ рднреА рдХреАрд╡рд░реНрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕реЗ 'рдирд┐рдЬреА' рдореЗрдВ рдбрд┐рдлреЙрд▓реНрдЯ рдХрд░рддрд╛ рд╣реИ)ред CalcManager CalcException.h 4

 class CalcException : std::exception { public: CalcException(HRESULT hr) { m_hr = hr; } HRESULT GetException() { return m_hr; } private: HRESULT m_hr; }; 

рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдиреЗ рдирд┐рдЬреА рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП std :: рдЕрдкрд╡рд╛рдж рд╡рд░реНрдЧ рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдЕрдиреНрдпрдерд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬреЗрдиреЗрд░рд┐рдХ рдПрд╕рдЯреАрдбреА рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ :: рдЕрдкрд╡рд╛рдж рдХреЗ рдХрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ CalcException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдЫреВрдЯ рдЬрд╛рдПрдЧрд╛ ред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЙрдкрдЬрд╛ рд╣реИ рдХрд┐ рдирд┐рдЬреА рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдордирд╛рд╣реА рд╣реИред

рдПрдХ рдЪреВрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рдХрд╛рд░рдг рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╡реИрд╕реЗ, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдЬреАрд╡рди рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ рд╡рд┐рдВрдбреЛрдЬ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╣реИ , рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЗрд╕ рд╕рд╛рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рднреА рдЪреЗрдХ рдХрд┐рдпрд╛ рдерд╛ред

рдирд╣реАрдВред 2. рдЕрдирдЫреБрдП HTML рдЯреИрдЧ


V735 рд╕рдВрднрд╡рддрдГ рдПрдХ рдЧрд▓рдд HTML рд╣реИред "</ Body>" рд╕рдорд╛рдкрди рдЯреИрдЧ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдЬрдмрдХрд┐ "</ div>" рдЯреИрдЧ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред book.cpp 127

 static QString makeAlgebraLogBaseConversionPage() { return BEGIN INDEX_LINK TITLE(Book::tr("Logarithmic Base Conversion")) FORMULA(y = log(x) / log(a), log<sub>a</sub>x = log(x) / log(a)) END; } 

рдЬреИрд╕рд╛ рдХрд┐ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИ, C / C ++ рд╕реНрд░реЛрдд рдХреЛрдб рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рдКрдкрд░ рд╕реНрдирд┐рдкреЗрдЯ рд╕реЗ рдЙрддреНрдкрдиреНрди рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

рдЪрд┐рддреНрд░ 6


рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ <div> рдЯреИрдЧ рдкрд╛рдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдХрдИ html-code рдЯреБрдХрдбрд╝реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреАрдбрд╝реЗ рдХрд╛ рдирд┐рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рджреЗрдЦрд╛ рддреЛ рдореИрдВ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реБрдЖред рддреЛ, рд╣рд╛рдБ, рд╣рдо html рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдЧрд░ рдпрд╣ рд╕реА ++ рдХреЛрдб рдХреЗ рднреАрддрд░ рд╣реИред :)

рди рдХреЗрд╡рд▓ рдЗрд╕ рдмрдЧ рдХреЛ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдмрд▓реНрдХрд┐ рдпрд╣ рд╣рдорд╛рд░реА рд╢реАрд░реНрд╖ 10 рд╕реВрдЪреА рдореЗрдВ рдПрдХ рджреВрд╕рд░рд╛ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдореЗрдВ рдХреМрди рд╕реЗ рдЕрдиреНрдп рдХреАрдбрд╝реЗ рдорд┐рд▓реЗ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, " рдЧрдгрдирд╛рдУрдВ рдХреЗ рдирдХреНрд╢реЗрдХрджрдо рдкрд░ рдЪрд▓реЗрдВ: рд╕реНрдкреАрдбрдХреНрд░рдВрдЪ " рд▓реЗрдЦ рджреЗрдЦреЗрдВред

рдирд╣реАрдВред 1. рдорд╛рдпрд╛рд╡реА рдорд╛рдирдХ рдХрд╛рд░реНрдп


рдпрд╣рд╛рдВ рдмрдЧ рдХреЛ рдкрд╣рд▓реЗ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдЕрдЬреАрдм рдмрдЧ рд╣реИ, рдЬреЛ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред

рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

 static int EatWhitespace (FILE * InFile) /* ----------------------------------------------------------------------- ** * Scan past whitespace (see ctype(3C)) and return the first non-whitespace * character, or newline, or EOF. * * Input: InFile - Input source. * * Output: The next non-whitespace character in the input stream. * * Notes: Because the config files use a line-oriented grammar, we * explicitly exclude the newline character from the list of * whitespace characters. * - Note that both EOF (-1) and the nul character ('\0') are * considered end-of-file markers. * * ----------------------------------------------------------------------- ** */ { int c; for (c = getc (InFile); isspace (c) && ('\n' != c); c = getc (InFile)) ; return (c); } /* EatWhitespace */ 

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдХреНрдпрд╛ рдХрд╣рдирд╛ рд╣реИ:

V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ: ('\ n'! = C)ред params.c 136ред

рдЕрдЬреАрдм рд╣реИ, рд╣реИ рдирд╛? рдЖрдЗрдП рдХреБрдЫ рдЕрдиреНрдп рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рд╕реНрдерд▓реЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ (charset.h) рдореЗрдВ:

 #ifdef isspace #undef isspace #endif .... #define isspace(c) ((c)==' ' || (c) == '\t') 

рд╣рдореНрдо, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рд╣реИ ... рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рд╕реА рд╡реИрд░рд┐рдПрдмрд▓ '\ n' рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ , рддреЛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди isspace (c) рд╡рд┐рд▓реНрдЯрд░реНрди рдЧрд▓рдд рд╣реИ , рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЪреЗрдХ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреЛ рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рдХрд╛рд░рдг рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдЗрд╕рд╕реНрдкреЗрд╕ (c) рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ c рд╡реЗрд░рдлрд┐рд▓ рдпрд╛ рддреЛ '' рдпрд╛ 't' рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ , рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ '\ n' рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЖрдк рдпрд╣ рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдореИрдХреНрд░реЛ #define рд╕рдЪ рдХреЗ рд╕рдорд╛рди рд╣реИ рдФрд░ рдХреЛрдб рдХреА рддрд░рд╣ рдпрд╣ рдХрднреА рднреА рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдмрдиреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕реНрдирд┐рдкреЗрдЯ рдиреЗ - рдФрд░ рдЦреЛрдЬ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдЗрдВрддрдЬрд╛рд░ рдореЗрдВ рднрдВрдбрд╛рд░ рдореЗрдВ рдмреИрдареЗ рдереЗред

рдЗрд╕ рдмрдЧ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП, " Wanna Play a Detective? Find the Bug in a Function from Midnight Commander " рд▓реЗрдЦ рджреЗрдЦреЗрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЪрд┐рддреНрд░ 9


рд╣рдордиреЗ рдЗрд╕ рд╡рд░реНрд╖ рдЯрди рдХреЗ рдХреАрдбрд╝реЗ рдкрд╛рдП рд╣реИрдВред рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдЧрд▓рддрд┐рдпрд╛рдБ рдереАрдВ, рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдБ, рдЕрд╢реБрджреНрдз рдЯреИрдЧ, рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреНрдп рджреЛрд╖ред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореБрджреНрджреЛрдВ рдХрд╛ рдирд┐рджрд╛рди рдХрд░рдирд╛ рд╕реАрдЦ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдзреАрдорд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирдП рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕реЗ рдкрд╣рд▓реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗред

рдмрд╕ рдЕрдЧрд░ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣рдорд╛рд░реЗ рд▓реЗрдЦ рдирд╣реАрдВ рдкрдврд╝реЗ рд╣реИрдВ, рддреЛ рдпреЗ рд╕рднреА рдмрдЧ рд╣рдорд╛рд░реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрд╛рдП рдЧрдП, рдЬрд┐рдирдХрд╛ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ C, C ++, C #, рдФрд░ Java рдореЗрдВ рд▓рд┐рдЦреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдмрдЧреНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред

рдЖрдк рдЕрдВрдд рдореЗрдВ рдлрд┐рдирд┐рд╢ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ! рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рджреЛ рд╕реНрддрд░реЛрдВ рд╕реЗ рдЪреВрдХ рдЧрдП рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЕрд╡рд╕рд░ рдХреЛ рдЬрдмреНрдд рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдЗрди рд╕реНрддрд░реЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВ: рд╕реА # рдФрд░ рдЬрд╛рд╡рд╛ ред

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


All Articles