#define编译器指令对我来说似乎很奇怪。我已经读过没有分配内存。
#include <iostream>
#define test 50
int main()
{
cout<<test;
return 0;
}
即使没有为编译器指令#define
分配内存,上面的函数也会显示50编译器如何知道50存储在其中(测试)而没有任何内存。
答案 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
替换为编译。因为替换不是在运行时完成的,所以没有开销。