C编程#define?

Nir*_*rav 5 c macros undefined-behavior

可能重复:
任何人都可以解释这些未定义的行为(i = i ++ + ++ i,i = i ++等...)

#include<stdio.h>
#include<conio.h>

#define SQ(x) x*x

void main()
{
   int a1 , a2;
   int b1 , b2;

   a1 = 2;
   a2 = 2;

   b1 = 0;
   b2 = 0;

   b1 = SQ(a1++);
   b2 = SQ(++a2);

   printf("Frist = %d",b1);
   printf("Second = %d",b2);
}
Run Code Online (Sandbox Code Playgroud)

我知道代码的输出是什么.

因为#define在其他程序中工作,所以它不能在上面的代码中工作为什么.?

Sev*_*yev 16

在同一个变量上有多个++运算符的表达式的结果在C中正式是一个未定义的行为.


Cho*_*ett 7

#define是预处理器的一个指令,用于通过扩展来逐字地替换每个宏的出现.因此,代码中的相关行将传递给编译器:

b1 = a1++ * a1++;
b2 = ++a2 * ++a2;
Run Code Online (Sandbox Code Playgroud)

正如Seva所说,这些表达方式正式未定义; 但即使我们采取什么可说是最明智的阅读你仍然会得到b1 = 2 * 3;b2 = 3 * 4;(既a1a2线后设置为4.


归档时间:

查看次数:

1401 次

最近记录:

14 年,12 月 前