define到底怎么用?这个输出我没有看懂?

#include<stdio.h>
#define N 3
#define Y(n) ((N+1)*n)
int main()
{
    int z;
    z=2*(N+Y(5+1));
    printf("%d",z);
    return 0;
}

为什么是输出48?而不是54?

z=2*(3+((3+1)*5+1))

C语言中define可以看做替代,在程序编译前先处理。也就是define N 3,意味着程序中所有N自动替换为3,然后在编译。
define Y(n) ((N+1)*n) 是这样理解的 Y(n)形式的替换为((N+1)*n) 形式,如果n为一个表达式需要看做一个整体进行替换。
z=2*(N+((N+1)*n))————n此处表示5+1,注意不加括号