C / C ++宏评估顺序

时间:2011-09-18 22:57:28

标签: c c-preprocessor operator-precedence

  

可能重复:
  C Preprocessor, Stringify the result of a macro

不久:

#include <iostream>

float pi(){ return 3.14; }

#define PRINT(x) std::cout << #x << std::endl;

#define PI pi()

int main(int argc, char *argv[])
{
    PRINT(PI)
    PRINT(pi())
    return 0;
}

结果:

PI
pi()

有没有办法在宏参数中只获取预处理数据?得到结果

pi()
pi()

编辑:

我没有注意到这个问题:C Preprocessor, Stringify the result of a macro 重复...

1 个答案:

答案 0 :(得分:0)

添加另一个辅助宏:

#define QU(x) #x
#define PRINT(x) std::cout << QU(x) << std::endl;
#define PI pi()