The enumeration type is not done correctly.
The way it is written the compiler is free to assign any four different integer to the four enumeration values.
Just about all compilers will choose the following values;
next to them in comments I am also showing the binary representation.
enum dog{
DOG_BIG = 0, /* 00000000000000000000000000000000 */
DOG_HAIRY = 1, /* 00000000000000000000000000000001 */
DOG_BROWN = 2, /* 00000000000000000000000000000010 */
DOG_SMART = 3} /* 00000000000000000000000000000011 */
This is not what your teacher wants.
You need to explicitly force the compiler to assign your desired values.
Below is the syntax, which uses Hexadecimal number representation,
and in comments is the binary representation.
enum dog{
DOG_BIG = 0x1, /* 00000000000000000000000000000001 */
DOG_HAIRY = 0x2, /* 00000000000000000000000000000010 */
DOG_BROWN = 0x4, /* 00000000000000000000000000000100 */
DOG_SMART = 0x8}; /* 00000000000000000000000000001000 */
The other issue is that your teacher did not tell you to use an enumeration type,
he asked for macros.
I do not know whether it matters, but programming using macros is more error prone than enumeration types. So I like your choice.
But in case this is an exercise about macros, not enumeration types, the syntax is
#define DOG_BIG (0x1)
and so on for the other three values.

Daniel B.
06/30/21
Yasmeen Y.
For later questions how do I know he’s asking for macros?06/30/21