рдХрд┐рд╕реА рддрд░рд╣ рдореИрдВрдиреЗ рдХрднреА рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ BOOL рдпрд╛ BOOLEAN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ? рдмреЗрд╢рдХ, BOOL рдХрдо рд╣реИ рдФрд░ BOOL рд╕рднреА рд╡рд┐рдВрдбреЛрдЬ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреИрд╕реЗ! рдХрд▓ рд╣реА, рдореИрдВрдиреЗ рдПрдХ рдШрдВрдЯреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рдЦреЛрдЬ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕реАрдзреЗ рдПрдХрдорд╛рддреНрд░ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рдмреВрд▓ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ C ++ рднрд╛рд╖рд╛ рдорд╛рдирдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, BOOLEAN рд╣реИред рдФрд░ BOOL "typedef int BOOL" рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдФрд░ windows.h рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ (WinDef.h рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ)
рдЖрдЗрдП рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
#include <stdio.h> #include <windows.h> bool CompareInt(int i1, int i2) { if (i1==i2) return true; //UPD1: TRUE else return false; //UPD1: FALSE } typedef BOOL (*CallBack)(int, int); void main(void) { CallBack IsEqual = (CallBack)CompareInt; if ( !IsEqual(0x1234, 0x5678) ) printf("Not equals"); else printf("Equals"); }
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕: рдмрд░рд╛рдмрд░ рд╣реИ
рдлрд┐рд░ BOOL рдХреЛ BOOLEAN рдореЗрдВ рдмрджрд▓реЗрдВ:
typedef BOOLEAN (*CallBack)(int, int)
рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ, рдЪрд▓рд╛рдПрдВ, рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ: рдмрд░рд╛рдмрд░ рдирд╣реАрдВ (рдЬреЛ рд╢реБрд░реВ рд╕реЗ рд╣реА рд╕рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)
рдирд┐рд╖реНрдХрд░реНрд╖: BOOL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрднреА рди рдХрд░реЗрдВ, рдХреЗрд╡рд▓ BOOLEANред
UPD1: рд░рд┐рдЯрд░реНрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░, рдпрд╣ рд╕рд╣реА рдерд╛ / FALSE рдкреНрд░рдпреЛрдЧ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реА / рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ред
UPD2: "рдХрд╛рд▓рд╛ рдЬрд╛рджреВ" рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ред рд░рд┐рдЯрд░реНрдирд┐рдВрдЧ рдмреВрд▓ рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ (рд╕реАрдкреАрдпреВ рдЕрд▓ рд░рдЬрд┐рд╕реНрдЯрд░) рдореЗрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдмреВрд▓ рдЪрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (рдФрд░ BOOLEAN рднреА рдЪрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП BOOLEAN рдХреЗ рд╕рд╛рде BOOL рдХреА рдЬрдЧрд╣ рддреНрд░реБрдЯрд┐ рдХреЛ рд╣рдЯрд╛ рджреЗрддреА рд╣реИ)ред
рд▓реЗрдХрд┐рди BOOL рдкреНрд░рдХрд╛рд░ int (eax рд░рдЬрд┐рд╕реНрдЯрд░) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдЧрд▓рдд (рдпрд╣ FALSE) рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдХрдо рдмрд╛рдЗрдЯ рдЕрд▓ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЙрдЪреНрдЪ рдмрд╛рдЗрдЯреНрд╕ (рдЖрд╣ рдФрд░ рдЕрдиреНрдп рдИрдПрдХреНрд╕) - рдЧреИрд░-рд╢реВрдиреНрдп рдХрдЪрд░рд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП BOOL, рдЬреЛ рдмреВрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, eax рдХреА рддрд░рд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдЧрд╛! = 0 рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред
рд╣рдореЗрдВ eax == 0 (рдирд╣реАрдВ рдХреЗ рдмрд░рд╛рдмрд░) рдХреЗ рд╕рд╛рде рд╢рд╛рдЦрд╛ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЕрдВрддрд┐рдо рдореЗрдВ, рдФрд░ рдИрдПрдХреНрд╕рдПрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рдП! = 0 (рдмрд░рд╛рдмрд░), рдХреНрдпреЛрдВрдХрд┐ ComparInt рдлрд╝рдВрдХреНрд╢рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 0 рдХреЗ рдмрд░рд╛рдмрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛, рдФрд░ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдирд╛ (рдХрдЪрд░рд╛) рдмрд╛рдЗрдЯреНрд╕ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рддреБрд▓рдирд╛ (рдЧрд▓рддреА рд╕реЗ?) рдХреЗ рдЕрдВрджрд░ рдИрдЖрд░рдПрдХреНрд╕ рдореЗрдВ 0 рдкрд░ рд╕реЗрдЯ рдирд╣реАрдВ рдереЗред
UPD3: рд╡реИрд╕реЗ, рдмреЛрд░рд▓реИрдВрдб рдмрд┐рд▓реНрдбрд░ C ++ рдиреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдкреНрд░рд╛рдЪреАрди (2006) рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЬрдм рдИрдЧреИрд░реЗрдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЭреВрдареЗ рд╕рднреА рдИрдЧрд▓ рдмрд┐рдЯреНрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ xor eax рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, eax - рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред