Try this
Code:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void foo ( int x, int y, int z, int a ) {
if ( x == y && y == z && x != a ) {
printf( "foo yes %d %d %d %d\n", x, y, z, a );
}
}
void bar ( int x, int y, int z, int a ) {
if ( ( x + y + z ) / 3 == x && x != a ) {
printf( "bar yes %d %d %d %d\n", x, y, z, a );
}
}
void baz ( int x, int y, int z, int a ) {
if ( (x & y & z) == x && (x | y | z) == x && x != a ) {
printf( "baz yes %d %d %d %d\n", x, y, z, a );
}
}
int main( void ) {
void (*fn[])(int,int,int,int) = { foo, bar, baz };
int i;
for ( i = 0 ; i < 3 ; i++ ) fn[i]( 2,1,3,4 );
for ( i = 0 ; i < 3 ; i++ ) fn[i]( 1,3,2,4 );
for ( i = 0 ; i < 3 ; i++ ) fn[i]( 1,1,1,2 );
for ( i = 0 ; i < 3 ; i++ ) fn[i]( 1,3,1,2 );
return 0;
}
You can combine many values together using & and |, and then only perform a pair of tests