В заключение, разница действительно заключается в компиляции вашего кода. Вам может понадобиться больше знаний о том, что там происходит.

ужно понять, как работает этот код:

#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?

ПРИМЕЧАНИЕ: я не должен менять код, я только пытаюсь понять вывод.

Ответы на вопрос(4)

Ваш ответ на вопрос