本题考察的是宏定义替换的内容
f(a+1) = a+1*a+1*a+1 = 3 + 3 + 3 + 1 = 10;
f((a+1)) = (a+1)*(a+1)*(a+1) = 4 * 4 * 4 = 64;
第一个式子中 a+1没有括号,直接替换x,这是计算机固定写死的运行方式。用a+1替换宏定义中的x就是a+1*a+1*a+1;
第二个中a+1被作为一个整体,替换。
A错在
"string" 有7个字节
而定义char [6]只有6个字节空间
在编译的时候, C对这个限制不高
顶多报一个警告
不会报错误的。
这种越界, 在C中是要靠自己把握的。
就像
char s[2]= "asdfasdfasdf";
这个在编译的时候 一样不会报错, 但很明显是不对的。
这是宏定义替换,s=3+1*3+1*3+1=10
t=(3+1)*(3+1)*(3+1)=64
如果是函数则两者是一样的
第一个是3+1*3+1*3+1
第二个是(3+1)*(3+1)*(3+1)