在C ++中使用编译器指令

时间:2014-12-09 16:13:26

标签: c++ compiler-directives

#define编译器指令对我来说似乎很奇怪。我已经读过没有分配内存

#include <iostream>
#define test 50
int main()
{
    cout<<test;
   return 0;
}

即使没有为编译器指令#define

分配内存,上面的函数也会显示50

编译器如何知道50存储在其中(测试)而没有任何内存。

2 个答案:

答案 0 :(得分:5)

Macros与变量不同。

您的编译器将翻译程序

#include <iostream>
#define test 50
int main()
{
   cout << test;
   return 0;
}

#include <iostream>
int main()
{
   cout << 50;
   return 0;
}

将名称test替换为#define语句中给出的值。您可能需要查看一下您可以在互联网上找到的tutorials,例如:

#define getmax(a,b) ((a)>(b)?(a):(b))
     

这将替换任何出现的getmax,后跟两个参数   通过替换表达式,还可以用它替换每个参数   标识符,如果它是一个函数,就像你期望的那样:

// function macro
#include <iostream>
using namespace std;

#define getmax(a,b) ((a)>(b)?(a):(b))

int main()
{
  int x=5, y;
  y= getmax(x,2);
  cout << y << endl;
  cout << getmax(7,x) << endl;
  return 0;
}

答案 1 :(得分:3)

实际上,test将被代码之前中遇到的50替换为编译。因为替换不是在运行时完成的,所以没有开销。