If I have:

```
#define likely(x)       __builtin_expect((x),1)
#define unlikely(x)     __builtin_expect((x),0)

if (A)
    return true;
else if (B)
    return false;
...
else if (Z)
    return true;
else
    //this will never really happen!!!!
    raiseError();
    return false;

```

Can I put likely() around the last condition check like `else if (likely(Z))` to signify that the final statement (else) is very unlikely WITHOUT the compiler affecting the branch prediction of the previous checks? 

Basically, does GCC try to optimize the entire if-else if block if there is a single conditional statement with a branch predictor hint?