#define 编译器指令对我来说似乎很奇怪。我读过没有分配内存。
#include <iostream>
#define test 50
int main()
{
cout<<test;
return 0;
}
即使没有为编译器指令#define 分配内存,上述函数也会显示 50
编译器如何知道 50 存储在其中(测试)而没有任何内存。
#define 编译器指令对我来说似乎很奇怪。我读过没有分配内存。
#include <iostream>
#define test 50
int main()
{
cout<<test;
return 0;
}
即使没有为编译器指令#define 分配内存,上述函数也会显示 50
编译器如何知道 50 存储在其中(测试)而没有任何内存。
宏与变量不同。
您的编译器将翻译程序
#include <iostream>
#define test 50
int main()
{
cout << test;
return 0;
}
至
#include <iostream>
int main()
{
cout << 50;
return 0;
}
通过将名称替换为您在声明中test
给出的值。#define
您可能想查看一些可以在 Internet 上找到的教程,例如:
#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; }
实际上,test
它将被编译之前50
在代码中遇到的任何地方替换。因为替换不是在运行时完成的,所以没有开销。