[ad_1]
#define is a preprocessor directive, not a statement or declaration as defined by the C grammar (both of those are required to end with a semicolon). The rules for the syntax of each one are different.
[ad_2]
solved Why does #define not require a semicolon?