For loop in `define Macro
generate
  for (i = 1; i&lt;=4; i=i+1)
  begin
    addr_i = i;
  end
endgenerate


Macros are expanded at beginning of compilation. By the time "generate" is processed, the code is equivalent to above. The generate will result in a "addr_i" being assigned four times but not "addr_1", "addr_2", etc.