它是什么?C++宏函数?如何替换这个宏?我能举个例子吗

what is it? C++ macro function? how to replace this macro? Could I have an example?

本文关键字:替换 函数 C++ 何替换 它是什么      更新时间:2023-10-16
#define functionA()
protected:
static int a;
int b;
string c;
#define functionB()
functionA()
public:
virtual int getvalue_a(){return a;}
virtual void setvalue_b(int VB){b = VB; }
virtual int get value_b(){return b;}

我想将这种代码转换为常规代码。我想使用类或正则函数来替换宏。

但我不知道"函数A()"answers"函数B()"是什么关系,它们是内在的吗?或者"functionA()"是functionB()的私有数据?

谢谢你的回答。

在C++编译的后续阶段开始之前,宏在源代码中执行替换。在这里,只要源代码中出现functionA(),文本"protected:static int a;int b;string C;"就会被替换(假设斜杠"/"实际上是反斜杠"\",这是多行宏的行延续字符)。请注意,行的延续被单个空格所取代,这并不重要。

无论"functionB()"出现在哪里,其文本都将被替换,"functionA()"替换将在替换的文本中进一步展开。

从功能上讲,这些宏恰好注入了包括protected:public:的源代码,因此它们只能在structclass内部有效。前者为它出现的类添加了一些数据成员,后者还提供了一些公共虚拟成员函数。

要将代码转换为常规代码,您可以手动执行一次替换,然后保存生成的文件,也可以要求编译器为您执行替换。。。例如,当给定"-E"或"/E"命令行选项时,许多编译器将输出经过预处理(宏扩展)的代码。不幸的是,这也会影响所有其他预处理器的更改(包括头文件的#include),因此只剪切和粘贴所需的替换可能需要大量的工作。

例如:

class X
{
...whatever stuff...
functionA()
...whatever stuff...
};

可以替换为。。。

class X
{
...whatever stuff...
protected:
static int a;
int b;
string c;
...whatever stuff...
};

而函数B的使用是从类似…的东西扩展而来的。。。

struct Y
{
...whatever stuff...
functionB()
...whatever stuff...
};

到…

struct Y
{
...whatever stuff...
protected:
static int a;
int b;
string c;
public:
virtual int getvalue_a(){return a;}
virtual void setvalue_b(int VB){b = VB; }
virtual int get value_b(){return b;}
...whatever stuff...
};