探究#define SQR(x) (x*x) 結果

#include <iostream>
#include <iomanip>
#define SQR(x) x*x 
int main()
{
    int a = 10, k = 5, m = 3;
    int b = SQR(k + m);
    a += SQR(k + m);
    std::cout << a << std::endl;
    system("pause");
    return 0;
}

上面這段代碼最終打印的a的結果是多少呢?剛看到毫不猶豫的回答74,但是實際是33,究竟是怎麼回事,下面來仔細看看是什麼原因

使用預編譯命令預編譯這段代碼,在c語言中預編譯過程會將函數中宏替換成對應的值,如SQR(b+2)這個宏將會被替換成相應的值,預編譯後代碼如下:

 

#include <iostream>
#include <iomanip>
int main()
{
    int a = 10, k = 5, m = 3;
    a += k + m * k + m;
    std::cout << a << std::endl;
    system("pause");
    return 0;
}
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章