[ Team LiB ] |
12.8 Disguising Boolean Values12.8.1 ProblemVariables representing boolean values are difficult to disguise because they usually compile to comparisons with 0 or 1. 12.8.2 SolutionDisguising boolean values can be tackled effectively at the assembly-language level by replacing simple test-and-branch code with more complex branching (see Recipe 12.3). Alternatively, the default boolean test can be replaced with an addition. 12.8.3 DiscussionBy replacing the default boolean test—usually a sub or an and instruction—with an addition, the purpose of the variable becomes unclear. Rather than implying a yes or no decision, the variable appears to represent two related values: typedef struct { char x; char y; } spc_bool_t; #define SPC_TEST_BOOL(b) ((b).x + (b).y) #define SPC_SET_BOOL_TRUE(b) do { (b).x = 1; (b).y = 0; } while (0) #define SPC_SET_BOOL_FALSE(b) do { (b).x = -10; (b).y = 10; } while (0) The SPC_TEST_BOOL macro can be used in conditional expressions: spc_bool_t b; SPC_SET_BOOL_TRUE(b); if (SPC_TEST_BOOL(b)) printf("true!\n"); else printf("false!\n"); 12.8.4 See Also |
[ Team LiB ] |