【发布时间】:2017-10-31 23:53:33
【问题描述】:
我需要了解这段代码是如何工作的:
#define foo1( a ) (a * a) // How does this work?
inline int foo2( int a ) { return (a * a); }
int goo1( int x ) { return foo1(foo2(x)); }
int goo2( int& x ) { return x = foo2(foo1(x)); }
int goo3( int& x, int y ) { return foo2(foo1(y + 1)); }
void goo4( int& x, int y ) { x = foo1(foo2(y + 1)); }
int main(){
int i = 2, j = 1, a = 2+3;
cout << "foo1 = " << foo1( 1+2 ) << "\n"; // How does this work?
cout << "foo2 = " << foo2( 2 + 1 ) << "\n";
cout << "goo1 = " << goo1( i ) << "\n";
cout << "goo2 = " << goo2( j ) << "\n";
cout << "goo3 = " << goo3( i, j ) << "\n"; // How does this work?
goo4( i, j );
cout << " i = " << i << " j = " << j << "\n";
}
但我似乎无法理解这个函数的行为:
#define foo1( a ) (a * a)
因此我不明白这两个函数调用的输出:
foo1( 1+2 )
goo3( i, j )
这是程序的输出:
foo1 = 5
foo2 = 9
goo1 = 16
goo2 = 1
goo3 = 9
i = 16 j = 1
我不明白为什么 foo1 的行为不像 foo2。有人会向我解释这个#define 宏是如何工作的吗?
注意:我不能更改代码,我只是想了解输出。
【问题讨论】:
-
这就是为什么你使用内联函数而不是#defines
-
如果必须使用定义,请尝试
#define foo1( a ) ((a) *( a)) -
#define foo1(a) ((a) * (a))。在您了解 C 并学会不使用宏之前,您还没有使用过宏。
-
当我只用一个 int 调用它时,我得到了预期的输出,例如
foo(5)会给我 25,也就是 5 * 5。但是为什么 foo1(1+2 ) 不是 9(即 3*3)? -
我得到了这段代码,我只需要了解输出,所以我无法更改它。 @pm100