#define causes an “expected primary-expression” error
#define N 10; int main() { int x; for (int i=0; i<N; i++) x = i; return 0; } Result of compiling this in g++: test-define.cpp: In function ‘int main()’: test-define.cpp:7:22: error: expected primary-expression before ‘;’ token test-define.cpp:7:22: error: expected ‘)’ before ‘;’ token test-define.cpp:7:24: error: name lookup of ‘i’ changed for ISO ‘for’ scoping [-fpermissive] test-define.cpp:7:24: note: (if you use ‘-fpermissive’ G++ will accept your code) test-define.cpp:7:27: error: expected ‘;’ before ‘)’ token But it compiles fine when I change line 7 to for (int i=0; i<10; i++) . Why is