рд▓реЛрдЧ рдмрдирд╛рдо рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: рдкрд╣рд▓реЗ рд▓реЗрддреЗ рд╣реИрдВ

рд╢реБрдн рд╕рдВрдзреНрдпрд╛ рд╣рдмрд░рд╛рдирд╛рд░реЛрдб!

рдЗрд╕ рдкреЛрд╕реНрдЯ рдФрд░ Habrasociety рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ (рдЬреИрд╕рд╛ рдХрд┐ Wo1f рдиреЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ рдХрд╣рд╛ рд╣реИ) - рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛред

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣:

рдЯреЗрд╕реНрдЯ 1:

int main() { vector<int> v; v.reserve(2); assert(v.capacity() == 2); v[0]; v[0] = 1; v[1] = 2; cout << v[0] << endl; v.reserve(100); cout << v[0] << endl; return 0; } 

VS2010 : рдХреБрдЫ рднреА рдирд╣реАрдВ
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ : рдХреБрдЫ рднреА рдирд╣реАрдВ

рдЯреЗрд╕реНрдЯ 2:

 void prettyFormat(int i, char* buf) { sprintf(buf, "%4d", i); } int main() { vector<int> v; v.reserve(2); //.... char buf[5]; prettyFormat(10, buf); return 0; } 

VS2010 : рдЪреЗрддрд╛рд╡рдиреА C4996: 'рд╕реНрдкреНрд░рд┐рдВрдЯрдл': рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЪрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реНрдкреНрд░рд┐рдВрдЯрдл_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ : рдХреБрдЫ рднреА рдирд╣реАрдВ

рдЯреЗрд╕реНрдЯ 3:

 int* prettyFormat(int i, char* buf) { sprintf(buf, "%4d", i); int* a; return a; } int main() { ... 

VS2010 : рдЪреЗрддрд╛рд╡рдиреА C4996: 'рд╕реНрдкреНрд░рд┐рдВрдЯрдл': рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЪрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реНрдкреНрд░рд┐рдВрдЯрдл_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдЪреЗрддрд╛рд╡рдиреА C4700: рдПрдХрддрд░рдлрд╛ рд╕реНрдерд╛рдиреАрдп рдЪрд░ 'рдПрдХ' рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ : рдХреБрдЫ рднреА рдирд╣реАрдВ

рдЯреЗрд╕реНрдЯ 4:

 int* prettyFormat(int i, char* buf) { sprintf(buf, "%4d", i); int* a; fopen("filename", "r"); char buf2[5]; strcpy(buf2, buf); return a; } 

VS2010 : рдкрд┐рдЫрд▓реЗ рджреЛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреЗрддрд╛рд╡рдиреА C4996: 'fopen': рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЪрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп fopen_s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдЪреЗрддрд╛рд╡рдиреА C4996: 'strcpy': рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЪрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп strcpy_s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ : рдХреБрдЫ рднреА рдирд╣реАрдВ

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рд╣реИ: рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреБрдЫ рднреА рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ "рдЖрдЙрдЯрдкреБрдЯ" рдХреЗ рд╕рднреА рддреАрди рд╕реНрддрд░ рд╣реИрдВред рд╢рд╛рдпрдж рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ? (рдореЗрдиреВ рд╕реЗ рдореИрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ -> рдЪреЗрдХ рд╕реЙрд▓реНрдпреВрд╢рди) рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ "рдЙрдкрдпреЛрдЧ" рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рддреЛ рд╣рдВрд╕реЛ рдорддред

рдирдП рдкрд░реАрдХреНрд╖рдг

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЬрд╛рд░реА рд░рдЦреЗрдВред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдорди рдореЗрдВ рдЖрдпрд╛:
 char buf[32]; strncpy(buf, data, strlen(data)); 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдлрд┐рд░ рд╕реЗ рдЪреБрдк рд╣реИ, рдФрд░ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдлрд┐рд░ рд╕реЗ "рдЕрд╕реБрд░рдХреНрд╖рд┐рдд" рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреА рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ strncpy ()ред
рдЕрд╕рд▓реА рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ? рд╕рдорд╕реНрдпрд╛ рдХреНрд▓рд╛рд╕рд┐рдХ рдмрдлрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реИ, рдПрдХ рддреНрд░реБрдЯрд┐ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдХрдИ рдХреЛ C / C ++ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реЛ рдЧрдпрд╛ рдФрд░ рдмрд╛рдХреА рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрди рдЦреВрдмрд╕реВрд░рдд рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рдорд┐рд▓рд╛ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЗрдирдкреБрдЯ рдмрдлрд╝рд░ рдХреА рд▓рдВрдмрд╛рдИ, рд▓рдХреНрд╖реНрдп рдХрд╛ рдЖрдХрд╛рд░ рдирд╣реАрдВ, strncpy рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!

рдЕрдЧрд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдЕрдзрд┐рдХ "рдкреЗрд╢реЗрд╡рд░" рд╕реНрддрд░ рд╣реИ, рдпрд╣ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ:
 list<unsigned long> a_list; unsigned long get_next() { unsigned long ret = 0; if (!a_list.empty()) { ret = a_list.front(); a_list.pop_front(); } return ret; } 

VS2010 : рдХреБрдЫ рднреА рдирд╣реАрдВ
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ : рдХреБрдЫ рднреА рдирд╣реАрдВ

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдХ рджреМрдбрд╝ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдПрдХ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ - рдпрд╣ рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдпрд╛ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рджреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓ рд░рд╣реЗ рд╣реЛрдВред рдпреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рд╣реА рд╕рдВрд╕рд╛рдзрди рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕реВрдЪреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдзрд╛рдЧрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЕрдиреНрдп pop_front рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╕реВрдЪреА рд╕реЗ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред

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

PS рд╡реНрдпрд╛рдХрд░рдг рдХреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП ... - рджреЗрд░ рд╕реЗ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦрд╛ред

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


All Articles