GNU C compiler has a __builtin_expect to tell the optimizer the most probable outcome of a value.
It is not standard C though.
You can #define macros to wrap around it and conditionally switch which definition to use, based on the compiler.
Linux kernel uses it this way (include/linux/compiler.h):
#define likely(x)      __builtin_expect(!!(x), 1)
#define unlikely(x)    __builtin_expect(!!(x), 0)
The ifs then become:
if (likely(an_expression)) { ... } 
if (unlikely(another_expression)) { ... }
2
solved Efficient checking for NULL pointers in function called millions of times [closed]