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. Because you're calling it wrong. The first argument to execl is the program that you want to run. The second and subsequent arguments become the argv array of the program you're calling.