Nir*_*rav 5 c macros undefined-behavior
#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在其他程序中工作,所以它不能在上面的代码中工作为什么.?
#define是预处理器的一个指令,用于通过扩展来逐字地替换每个宏的出现.因此,代码中的相关行将传递给编译器:
b1 = a1++ * a1++;
b2 = ++a2 * ++a2;
Run Code Online (Sandbox Code Playgroud)
正如Seva所说,这些表达方式正式未定义; 但即使我们采取什么可说是最明智的阅读你仍然会得到b1 = 2 * 3;和b2 = 3 * 4;(既a1与a2线后设置为4.
| 归档时间: |
|
| 查看次数: |
1401 次 |
| 最近记录: |