 <p>Like most (all, maybe) C compilers, the size of an enumerated type can vary. Here's an example program and its output:</p> <pre><code>#include &lt;stdio.h&gt; typedef enum { val1 = 0x12 } type1; typedef enum { val2 = 0x123456789 } type2; int main(int argc, char **argv) { printf("1: %zu\n2: %zu\n", sizeof(type1), sizeof(type2)); return 0; } </code></pre> <p>Output:</p> <pre><code>1: 4 2: 8 </code></pre> <p>All that the standard requires is:</p> <blockquote> <p>The choice of type is implementation-defined, but shall be capable of representing the values of all the members of the enumeration.</p> </blockquote> <p>A quick web search didn't turn up a clang manual that specified its behaviour, but one is almost certainly out there somewhere.</p>