带参数的宏的引用数值代换进去后用++为什么是+2,而不是加一

用函数调用处理是正常的,j值每次增加1。带参数的宏的引用数值代换进去后j值每次加2
带参数的宏的引用数值代换进去后用++为什么是+2,而不是加一。给j设定过不同的初值,每次j值都是增加2,宏引用设定就是这样吗?

#include <iostream> 
using namespace std;
#define M2(y) ((y)*(y))
int main()
{
    for (i = 1, j = 1; i <= 5; i++) cout << M2(j++) << " "; //宏引用处理
    cout << endl;
    return 0;
}

我的电脑上的运行结果:1 9 25 49 81
变成了(j+2)的平方

M2(j++)被替换成((j++)*(j++)),可不是每次循环都加2么
宏是简单的在编译前进行代码的替换,不是像函数一样把参数计算出来再传递进去。

谢谢
j++不是加1吗?为什么在宏引用里面变成了加2?
刚刚开始学,有点混乱了