Question: Usually, if a `*/`*(block comment closing)* is present in the code without a `/*`*(block comment opening)*, the compiler produces an error.

However, why does the compiler ***NOT*** produce an error in the following case?

```c
#include <stdio.h>
int main(void)
{
    #ifdef abcd
    printf("what ever it is");
    #endif */   --> the problem with this stray '*/' after #endif
    return 0;
}

```

Answer: 
I've just compiled the code you provide with gcc 4.6.x without any flags and got a warning 

```
warning: extra tokens at end of #endif directive [enabled by default]

```

So preprocessor at first remove all comments and then just skip all the data at the line of #endif. So i don't know is it a bug or a feature, but i got the warning about it, so the developers know about this issue.
```
#endif */

```

That's the end of a block comment, where is the block comment opening?

```
/*

```