#define问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 01:08:44
#include<stdio.h>
#define A 2
#define B A+1
#define C 2*B+1
void main()
{
int a;
printf("%d,%d,%d,",C,2*B+1);
}
%d,%d的结果是6,6
而多加了%d一个为什么就出来6,6,负的24呢?
A+1与(A+1)在#define中有不同的结果吗

多加一个%d,出来的是未知的数值,因为最后一个%d对应的地址未知
有不同,运算顺序不同
比如现在的程序,C=2*B+1=2*A+1+1=6
而如果C=2*(B+1),C=2*(A+1+1)=8

一:多一个%d, 输出的是-24, 那只是个巧合,它输出的是你内存的一个整型数据,它目前存的是-24。 这样的调用本身就是有问题的,我们无法控制输出,我们不知道它输出的是那个内存单元,但编译器不会给出任何警告!~!~
二:A+1与(A+1)的输出是不同的,#define的作用只是替代, 不加括号的时候,2*B+1 = 2 * A + 1 + 1 = 2 * 2 + 1 + 1 = 6
加括号, 2* B+1 = 2 * (A + 1) + 1 = 2 * ( 2 + 1) + 1 = 7