解释以下宏代码的输出

时间:2018-08-18 17:11:51

标签: c++

#include <iostream>

using namespace std
#define SQUARE(x) (x+1 *x+1)  // Complete the Macro defion
int main() {

    int i, j;

    cin >> i;

    j = SQUARE(i + 1); 

    cout << j << endl;

    return 0;
}

1 个答案:

答案 0 :(得分:1)

预处理器执行宏替换,因此,我们做同样的事情:

openCV

输出留给读者练习。 (请记住,数学优先级规则适用。)

提醒:宏是邪恶的,更喜欢内联函数。例如,Python有意义吗?

该宏可以轻松替换为:

#include <iostream>

using namespace std;
#define SQUARE(x) (x+1 *x+1)  // Complete the Macro defion
int main() 
{
    int i, j;
    cin >> i;
    // Substitute "i + 1" for "x" in macro:
    j = i + 1 + 1 * i + 1 + 1;
    cout << j << endl;
    return 0;
}

SQUARE("HELLO")是建议编译器替换调用所在的函数 inline 的代码,从而消除了函数调用。

上面的代码阻止某人执行inline int SQUARE(int x) { return (x + 1) * (x + 1); } ,因为编译器会将其标记为错误。