为什么具有相同名称的宏和函数只有在函数定义后定义宏时才有效?

时间:2014-09-27 14:07:10

标签: c function macros

以下代码可以正常使用

void a()
{
    printf("In fn");
}

#define a() printf("In macro")

void main()
{
    a();
}

O / p在宏

但是在funcn定义之前定义宏时,请查看此代码。(引发编译错误)

#define a() printf("In macro")

void a()
{
    printf("In fn");
}


void main()
{
    a();
}

我的问题为什么它在宏定义在函数声明之后才起作用,在它之前不起作用....

1 个答案:

答案 0 :(得分:3)

在第一种情况下,结果是:

void a()
{
    printf("In fn");
}

void main()
{
    printf("In macro");
}

在第二个:

void printf("In macro")
{
    printf("In fn");
}

void main()
{
    printf("In macro");
}

这显然不是c代码。

在compilaton之前替换定义。