The C compiler adheres to very strict rules when it comes to evaluating expressions that consist of different data types. The compiler also has two rules that it uses for converting arguments that are passed to functions.