In addition to avoiding undefined behavior, MISRA discourages language features that are "dangerous" like I/O and dynamic memory routines. It also defines some (controversial) styling rules, such as requiring functions to have exactly one exit point.