Skip to content

Latest commit

 

History

History
33 lines (24 loc) · 755 Bytes

bug604.md

File metadata and controls

33 lines (24 loc) · 755 Bytes

宏的使用

找Bug

//Project - Macro
#include <iostream>
using namespace std;

#define SQUARE(x)  x*x

int main() {
    cout << SQUARE(3) << endl;      //3的平方,预期输出为9
    cout << SQUARE(3+2) << endl;    //3+2的平方,预期输出为5的平方,即25
    return 0;
}

说明

SQUARE(3+2)的结果是11,为什么?

执行结果不符预期的原因与预处理器的工作原理有关, 宏定义SQUARE(x)是在预处理阶段由预处理器展开的,而展开的方式就是简单的文本替换。 对于预处理器而言,SQUARE(3+2)中的x即为“3+2”,按定义展开后是这样的:

3+2*3+2