А кто мешает использовать переменную с полями битов: void fun1(void) { } void fun2(void) { } void fun3(void) { }
void main(void) { struct myflags{ char flag1 :1; char flag2 :1; char flag3 :1; }m; m.flag1=1; m.flag2=m.flag3=0; if(m.flag1!=0)fun1(); if(m.flag2!=0)fun2(); if(m.flag3!=0)fun3(); } Разворачивается буквальнов в три команды и никаких сдвигов: \ 00000008 FB80 BST R24, 0 \ 0000000A F40E BRTC ??main_0 \ 0000000C .... RCALL fun1 21 if(m.flag2!=0)fun2(); \ ??main_0: \ 0000000E FB81 BST R24, 1 \ 00000010 F40E BRTC ??main_1 \ 00000012 .... RCALL fun2 22 if(m.flag3!=0)fun3(); \ ??main_1: \ 00000014 FB82 BST R24, 2 \ 00000016 F40E BRTC ??main_2 \ 00000018 .... RCALL fun3
|