An enum is a user-defined type in C that allows a variable to be a set of predefined constants (names that represent integer values). A structure is a collection of variables (also known as members) of different types grouped together under a single name. A union is a data type that allows to store different data types in the same memory location.