在C ++中的宏内使用变量

时间:2019-04-12 03:04:19

标签: c++ macros

我遇到了以下宏,但我不知道它到底在做什么;

#include <iostream>
#define TEST(a1) \
  int a1 = 5; 

int main(){

   TEST(a1);
   std::cout << a1  << std::endl;

   return 0;
}

它编译并打印5

我在某种程度上了解宏,但是我无法为这里发生的事情所困扰。在我看来TEST就像一个函数,正在重新定义其参数a1

1 个答案:

答案 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;