定义指令

时间:2014-07-10 03:20:22

标签: c output

#include<stdio.h>

int main()
{
printf("%d",a);
#define a 10
}

/ *预处理程序活动是在完成编译之前完成的,所以为什么错误来自这个程序,'a'是未定义的,即 a未定义* /

/*second doubt*/

#include<stdio.h>
#include<stdlib.h>

void fun();

int main()
{
fun();
#define a 20
}

void fun()
{
printf("i m inside the function %d",a);
}

output->i m inside the function 20 

/ *现在这里也会出现错误,因为没有定义,因为在#define之前调用了fun,但它的工作正常* /

/ *任何帮助都将得到极大的认可* / 提前谢谢

4 个答案:

答案 0 :(得分:5)

来自documentation on MSDN

  

预处理程序指令可以出现在源文件中的任何位置,但它们仅适用于源文件的其余部分。

在您的第一个示例中,a#define之前使用,而在第二个示例中,您首先调用fun,但在使用{之后在源中定义它{ {1}}。我相信这就是为什么第一个有错误,但第二个没有错误。

答案 1 :(得分:2)

预处理器执行使用#define来在编译时之前搜索并替换。因此,使用#define就像声明变量一样。

当预处理器(与编译器分开)通过您的代码时,首先它会看到#define语句。它将此解释为“每当我看到a时,我都会用20替换它。”然后,在多几行之后,它会看到a并替换它。在此之后,编译器运行,它会看到以下语句:

printf("i m inside the function %d",20);
在这种情况下,

20是完全有效的东西,因此它会相应地编译它。

您的混淆是由于函数被调用的顺序。然而,预处理器不关心什么调用什么。它所关心的只是事物在源文件中出现的顺序

答案 2 :(得分:0)

将#define移动到函数中的print语句之后,然后你就会明白为什么这不会给你一个错误(以及为什么你现在有错误)。 #defines仅在文件的其余部分发生时进行处理。这就是您通常希望将它们放在文件顶部的原因。

答案 3 :(得分:-1)

就像你说的那样:

  

预处理器活动在完成补充之前完成

所以它应该是

#include<stdio.h>
#define a 10

int main()
{
   printf("%d",a);
}

#include<stdio.h>
#include<stdlib.h>
#define a 20

void fun();

int main()
{
  fun();
}

void fun()
{
  printf("i m inside the function %d",a);
}

如果要在功能块中使用它,请将 #define a 10 更改为 int a = 10;