Because preprocessing directives are not instructions.
Not even all statements must be final ; . For instance:
int bla = 1; if (bla) { }
After declaring bla we have two statements: one if and one empty compound statement. No ; but the program is valid.
source share