#define F(X,Y)(X)*(Y)
main()
{int a=3, b=4;
printf("%d\n", F(a++, b++));
}
程序运行后的输出结果是
...#define F(X,Y)(X)*(Y) main() { int a=3, b=4; printf("%d\\n...
结果等于12;运行完了之后,a = 4; b = 5;程序,结果如图:
...#define F(X,Y)(X)*(Y) main() { int a=3, b=4; printf("%d\\n",F...
a++ 是先做运算再++ 这里的运算也包括输出什么的 ++a 是先++再运算 同上
...X*Y main() { int a=3, b=4; printf("%d\\n", F(a+b, a-b)); }...
define F(X,Y) X*Y define G(X,Y) (X)*(Y)int main() { int a = 3, b = 4;printf("%d\\n", F(a + b, a - b));\/\/ 宏展开式为:3 + 4*3 - 4,输出为: 11 printf("%d\\n", G(a + b, a - b));\/\/ 宏展开式为:(3 + 4)*(3 - 4),输出为: -7 retur...
...X*Y main(){int a=3,b=4;printf("%d\\n",F(a+b,a-b)); 我做出来11...
F(a+b,a-b) 代入到X*Y相当于a+b*a-b=3+4*3-4=11,没错的,如果答案是-7说明答案错了。
...main() {int a=3,b=4; printf9"%d\\n",sub(a++,b++)) 怎么做啊...
include<stdio.h> define SUB(x,y)(x)*y void main(){ int a=3,b=4;printf("%d\\n",SUB(a++,b++));} 结果:12 注意:大小写问题,以及声明的习惯 还有就是++(自增)的用法,这里是先执行结果,然后再进行自增,也就是执行完之后a=4,b=5 ...
...y) main(){int a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d)*10 ;_百度...
宏不做类型判断,编译的时候就是简单的替换,所以在判断宏的时候,如果看不明白,你就在纸上写一下,把要替换的语句直接替换了,一看就明白了。这句替换完就是 t=(a+b)>(c+d)?(a+b):(c+d)*10,优先级高于:所以就等价于:7>6?7:60 所以结果就是7 ...
...z) x*y+z main() { int a=1,b=2,c=3; printf("%d",M(a+b,b+c,c...
1 宏只是简单的替换,所以M(a+b,b+c,c+a)展开后就是:a+b*b+c+c+a = 12 2 a是这个数组的首指针,指向数组第一个元素,也就是9,a+5指向数组第6个元素,也就是4.希望你能理解。
#define f(x) x*x*x main() { int a=3,s,t; s=f(a+1);t=f((a+1...
要这样定义宏:#define f(x) (x)*(x)*(x)不然有二义性的。像你这样定义f(x) x*x*x;传f(a+1)实际上运行的是f(a)+f(1)
...y) void main( ) { int a=4, b=3, c=2, d=1, e; e
这怎么会是70,分明是7啊!宏扩展是字符串替换而不是从左至右的计算。把具体字符串代进去就一目了然了:e=MAX(a+b,c+d)*10-->e=(a+b)>(c+d) ? (a+b) : (c+d)*10-->e=7>3 ? 7 : 3*10-->e=7。想成70或30,就得写成e=(MAX(a+b,c+d))*10;。
...x,y,z) x*y+z main() { int a=1,b=2,c=3; printf("%d\\n",M(a+...
M(x,y,z) x*y+z x:a+b=1+2 y:b+c=2+3 z:c+a=3+1 代入 x*y+z=1+2*2+3+3+1=12。没问题。注意在预编译部分题目怎么写的,你就按照他写的格式直接把数代入就行了,不能给题目加括号。M(x,y,z)和M((x),(y),(z))是不一样的。