рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдЖрд░реНрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рд▓рдЧрднрдЧ рдкрд░рдлреЗрдХреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рд╣рдорд╛рд░рд╛ рдзреНрдпрд╛рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ GitHub рдкрд░ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдЖрд░реНрдЯреНрд╕ рднрдВрдбрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЫреЛрдЯрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рддреЗрдИрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдХреБрдЫ C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣реА рдереАрдВ: EASTL, EAStdC, EABase, EAThread, EATest, EAMain, рдФрд░ EAAssertред рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рдЦреБрдж рднреА рдЫреЛрдЯреА рд╣реИрдВ (рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 10 рдлрд╛рдЗрд▓реЗрдВ), рдЗрд╕рд▓рд┐рдП рдмрдЧ рдХреЗрд╡рд▓ 20 рдлрд╛рдЗрд▓реЛрдВ рдХреА "рд╕рдмрд╕реЗ рдмрдбрд╝реА" рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд╛рдП рдЧрдП: рдбреА рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдвреВрдВрдв рд▓рд┐рдпрд╛, рдФрд░ рд╡реЗ рджрд┐рд▓рдЪрд╕реНрдк рджрд┐рдЦрддреЗ рд╣реИрдВ! рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦ рд░рд╣рд╛ рдерд╛, рд╣рдо рдИрдП рдЧреЗрдореНрд╕ рдФрд░ рдХрдВрдкрдиреА рдиреАрддрд┐: рдбреА рдХреА рдЬреАрд╡рдВрдд рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рдереЗ

рдЪрд┐рддреНрд░ 1


рдкрд░рд┐рдЪрдп


рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдЖрд░реНрдЯреНрд╕ (EA) рдПрдХ рдЕрдореЗрд░рд┐рдХреА рд╡реАрдбрд┐рдпреЛ рдЧреЗрдо рдХрдВрдкрдиреА рд╣реИред GitHub рдФрд░ рдХреБрдЫ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдкрд░ рдЗрд╕рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рднрдВрдбрд╛рд░ рд╣реИ , рдЕрд░реНрдерд╛рддреН C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝: EASTL, EAStdC, EABase, EAThread, EATest, EAMain, рдФрд░ EAAssertред рд╡реЗ рдЫреЛрдЯреЗ рд╣реИрдВ, рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗрд╡рд▓ "рд╕рдмрд╕реЗ рдмрдбрд╝реА" рдкрд░рд┐рдпреЛрдЬрдирд╛, рдИрдПрдПрд╕рдЯреАрдбреАрд╕реА (20 рдлрд╛рдЗрд▓реЗрдВ) рдореЗрдВ рдХрд┐рд╕реА рднреА рдХреАрдбрд╝реЗ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде, рдЖрдк рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдиреНрдпрд╛рдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рдВрдЪ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдирд┐рд░реНрдгрдп рд▓реЗрдВред

рдЪреЗрддрд╛рд╡рдиреА рез


V524 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ '>>' рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ '<<' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордХрдХреНрд╖ рд╣реИред EAFixedPoint.h 287

template <class T, int upShiftInt, int downShiftInt, int upMulInt, int downDivInt> struct FPTemplate { .... FPTemplate operator<<(int numBits) const { return value << numBits; } FPTemplate operator>>(int numBits) const { return value << numBits; } FPTemplate& operator<<=(int numBits) { value <<= numBits; return *this;} FPTemplate& operator>>=(int numBits) { value >>= numBits; return *this;} .... } 

рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ << рдХреЗ рдмрдЬрд╛рдп << рд▓рд┐рдЦрдХрд░ рдЯрд╛рдЗрдкреЛ рдмрдирд╛рдпрд╛ред рдпрд╣ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдЧрд▓рддреА рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

рдЪреЗрддрд╛рд╡рдиреА реи


V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'NFormatLength' рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдореВрд▓реНрдп 16 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред EASprintfOrdered.cpp 246

 static const int kSpanFormatCapacity = 16; struct Span8 { .... char mFormat[kSpanFormatCapacity]; .... }; static int OVprintfCore(....) { .... EA_ASSERT(nFormatLength < kSpanFormatCapacity); if(nFormatLength < kSpanFormatCapacity) spans[spanIndex].mFormat[nFormatLength++] = *p; // <= else return -1; switch(*p) { case 'b': case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'g': case 'G': case 'e': case 'E': case 'f': case 'F': case 'a': case 'A': case 'p': case 'c': case 'C': case 's': case 'S': case 'n': { // Finalize the current span. spans[spanIndex].mpEnd = p + 1; spans[spanIndex].mFormat[nFormatLength] = 0; // <= spans[spanIndex].mFormatChar = *p; if(++spanIndex == kSpanCapacity) break; .... } 

рд╕реНрдкреИрди [рд╕реНрдкреИрдирдЗрдВрдбреЗрдХреНрд╕] .mFormat рд╕рд░рдгреА рдореЗрдВ 16 рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдВрддрд┐рдо рд╡реИрдз рддрддреНрд╡ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ 15 рд╣реИ ред рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд░реВрдк рдореЗрдВ, OVprintfCore рдлрд╝рдВрдХреНрд╢рди nFormatLength рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдмрдврд╝рд╛рдХрд░ 16 рддрдХ рдХрд░ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдХрд╛ рдЙрдЪреНрдЪрддрдо рд╕рдВрднрд╡ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИ, рдЕрд░реНрдерд╛рдд 15 ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдПрдХ рд╕рд░рдгреА-рдЖрдЙрдЯ-рдСрдл-рдмрд╛рдЙрдВрдб рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рджреЛ рдмрд╛рд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

  • V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'NFormatLength' рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдореВрд▓реНрдп 16 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред EASprintfOrdered.cpp 614
  • V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'NFormatLength' рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдореВрд▓реНрдп 16 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред EASprintfOrdered.cpp 977

рдЪреЗрддрд╛рд╡рдиреА рей


V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ: (рдкрд░рд┐рдгрд╛рдо> = 0)ред EASprintfOrdered.cpp 489

 static int OVprintfCore(....) { .... for(result = 1; (result >= 0) && (p < pEnd); ++p) { if(pWriteFunction8(p, 1, pWriteFunctionContext8, kWFSIntermediate) < 0) return -1; nWriteCountSum += result; } .... } 

рдкрд░рд┐рдгрд╛рдо = = 0 рд╕реНрдерд┐рддрд┐ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рдгрд╛рдо рдЪрд░ рдХреЛ рд▓реВрдк рдореЗрдВ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдб рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рд╣реА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЧрд▓рддреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рджреЛ рдмрд╛рд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

  • V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ: (рдкрд░рд┐рдгрд╛рдо> = 0)ред EASprintfOrdered.cpp 852
  • V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ: (рдкрд░рд┐рдгрд╛рдо> = 0)ред EASprintfOrdered.cpp 1215

рдЪреЗрддрд╛рд╡рдиреА рек


V1009 рд╕рд░рдгреА рдЖрд░рдВрднреАрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрд░рдВрднрд┐рдХ рд╣реИред рдмрд╛рдХреА рддрддреНрд╡реЛрдВ рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред EASprintfOrdered.cpp 151

 static int OVprintfCore(....) { .... int spanArgOrder[kArgCapacity] = { -1 }; .... } 

рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдмрдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЗрд╡рд▓ рд╕реНрдкреИрдирдСрд░реНрдЧрдСрд░реНрдбрд░ рд╕рд░рдгреА рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ -1 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдмрд╛рдХреА рд╕рднреА рдХреЛ 0 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рджреЛ рдмрд╛рд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

  • V1009 рд╕рд░рдгреА рдЖрд░рдВрднреАрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрд░рдВрднрд┐рдХ рд╣реИред рдмрд╛рдХреА рддрддреНрд╡реЛрдВ рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред EASprintfOrdered.cpp 518
  • V1009 рд╕рд░рдгреА рдЖрд░рдВрднреАрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрд░рдВрднрд┐рдХ рд╣реИред рдмрд╛рдХреА рддрддреНрд╡реЛрдВ рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред EASprintfOrdered.cpp 881

рдЪреЗрддрд╛рд╡рдиреА рел


V728 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдБрдЪ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдж '(A &&! B) || (рдП! рдФрд░ рдмреА) 'рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐' рдмреВрд▓ (рдП)! = рдмреВрд▓ (рдмреА) 'рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред int128.h 1242

 inline void int128_t::Modulus(....) const { .... bool bDividendNegative = false; bool bDivisorNegative = false; .... if( (bDividendNegative && !bDivisorNegative) || (!bDividendNegative && bDivisorNegative)) { quotient.Negate(); } .... } 

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

 if( bDividendNegative != bDivisorNegative) { quotient.Negate(); } 

рдХреЛрдб рдЕрдм рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдЬреЛ рд╣рд╛рд▓рдд рдХреЗ рддрд░реНрдХ рдХреЛ рд╕рдордЭ рд▓реЗрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

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


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

рдЙрдореНрдореАрдж рд╣реИ, рдИрдП рдХреБрдЫ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдо рдЙрдирдХреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдПрдБрдЧреЗ :)ред рдЗрд╕ рдмреАрдЪ, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

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


All Articles