我遇到了以下宏,但我不知道它到底在做什么;
#include <iostream>
#define TEST(a1) \
int a1 = 5;
int main(){
TEST(a1);
std::cout << a1 << std::endl;
return 0;
}
它编译并打印5
。
我在某种程度上了解宏,但是我无法为这里发生的事情所困扰。在我看来TEST
就像一个函数,正在重新定义其参数a1
?
答案 0 :(得分:2)
只要您通过preprocessor调用宏,宏就会将定义在宏中的代码放入
基本上可以归结为这段代码:
#include <iostream>
#define TEST(a1) \
int a1 = 5;
int main(){
TEST(a1);
std::cout << a1 << std::endl;
return 0;
}
成为此代码:
#include <iostream>
int main(){
int a1 = 5;
std::cout << a1 << std::endl;
return 0;
}
有效。
宏的优点是,您可以多次使用它。并且,由于我们的示例已参数化,因此我们可以在较小的变化下使用它。因此,例如,这段代码:
#include <iostream>
#define TEST(a1) \
int a1 = 5;
int main(){
TEST(a1);
std::cout << a1 << std::endl;
TEST(a2);
std::cout << a2 << std::endl;
TEST(a3);
std::cout << a3 << std::endl;
return 0;
}
成为:
#include <iostream>
int main(){
int a1 = 5;
std::cout << a1 << std::endl;
int a2 = 5;
std::cout << a2 << std::endl;
int a3 = 5;
std::cout << a3 << std::endl;
return 0;
}
您可以对宏做很多事情,我建议您对其进行研究,但这将使您入门。
编辑:另外值得一提的是,如果您愿意,可以将此宏更改为:
#define TEST(a1,val) \
int a1 = val;
这样,您可以根据需要独立控制初始化值。所以:
TEST(a4,8)
成为:
int a4 = 8;