>>35
Read any of the fucking standards you mentioned in your post you fucking retard.
C99 6.10-4 When in a group that is skipped (6.10.1), the directive syntax is relaxed to allow any sequence of preprocessing tokens to occur between the directive name and the following new-line character.
Let me break this down.
1. string.h defines NULL.
2. The directive is #ifndef NULL.
3. If string.h is included, the condition is false.
4. A group is "skipped" if the condition in a conditional preprocessing directive is false.
5. All directives (lines beginning with # followed by a valid directive name, such as #define) in the group are skipped, no matter what tokens follow them on the line.
6. The #define is skipped, no matter what else the line contains.
#include <string.h>
#ifndef NULL /* on a conforming implementation, this will always be skipped */
#define NULL "you stupid piece of shit" -- >>35
#define __LOOK_IM_USING_DOUBLE_UNDERSCORES__ When in a group that is skipped (6.10.1), the directive syntax is relaxed to allow any sequence of preprocessing tokens to occur between the directive name and the following new-line character.
#define __STDC__ "Read any of the fucking standards you mentioned in your post you fucking retard." -- >>35
#include "a file that doesn't exist.h"
#endif
This is conforming code. None of the directives have any effect. Otherwise the compiler would complain about missing files and redefined identifiers whenever someone used conditional compilation. Include guards and testing for the OS wouldn't work. Why do you think the C standard defines __STDC__ in the first place?