#include<stdio.h>
#define A 12;
int main(void){
int words,c=1;
int b=2;
words=(c+1)*A-b;
printf("%d\n",words);
return 0;
}
为什么结果是24,不是应该是22吗
#define A 12;是宏定义,A是没有数据类型的,它只是相当于后面表达式的一个别名,即A代表12; 所以这里12后面是不能有分号的,否则将A替换到代码中就是
words=(c+1) * A-b;
替换为
words=(c+1) * 12;-b;
由于分号的存在,这一行变成两条语句了,-b不在words的赋值语句中,由于b为2,所以words值比你预想的多了2
#define A 12;这一句最后多了一个分号,宏定义就是简单的字符替换。
words=(c+1)*A-b; 替换宏定义后的代码是 words=(c+1)*12;-b;
也就是给words赋值的时候,赋值的部分是 words=(c+1)*12,(-b是一个单独的语句)。所以words的值是24
把#define A 12;这里的分号去掉,结果就是22 了
测试图:
改正如下:
#include<stdio.h>
#define A 12 //宏定义语句后不加分号 ;
int main(void){
int words,c=1;
int b=2;
words=(c+1)*A-b;
printf("%d\n",words);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!希望对题主有所帮助!可以的话,帮忙点个采纳!