See the gcc documentation for details of exactly what information they need. There's really not much that can be done about this, except to add -traditional to the compiler flags. Note that -traditional has effects beyond just changing the language that gcc accepts. This increases the memory footprint of the program. Preprocessor symbols conflict with prototypes in the code One of the most frequent problems is that some common functions are defined as macros in Linux's header files and the preprocessor will refuse to parse similar prototype definitions in the code.
Programs start busy-waiting.
This may be implemented in future versions of the system. It is incredibly unwise to assume one behaviour or the other. Interrupted system calls. The program is not expecting that to happen, so bottles out. You may choose between two fixes.