A typedef declaration creates a new name (an alias) for an existing type. It does not define a new type. An enum declaration defines a discrete type with named values . If you’re trying to learn C by asking one question at a time, that’s not a good approach.