它是什么?C++宏函数?如何替换这个宏?我能举个例子吗
what is it? C++ macro function? how to replace this macro? Could I have an example?
#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:
的源代码,因此它们只能在struct
或class
内部有效。前者为它出现的类添加了一些数据成员,后者还提供了一些公共虚拟成员函数。
要将代码转换为常规代码,您可以手动执行一次替换,然后保存生成的文件,也可以要求编译器为您执行替换。。。例如,当给定"-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...
};
相关文章:
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 用符号版本替换对函数的所有调用
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 用矩阵将函数中的整数值替换定义的常量
- 函数模板实例化、替换和重载解析的顺序是什么?
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 仅当一个参数中未使用 std::function 时,模板函数替换才有效
- 为什么数组中对象的析构函数在被另一个对象替换时不被调用?
- 如何使替换 c 函数的变量名成为错误?
- hstrerror() 的替换函数
- 重新声明时替换函数默认参数
- C++字符串替换函数无限循环
- 如何在c++中替换函数调用的所有实例
- 用C++模板替换函数调用的C宏
- 使用字符串替换函数将字符串的一部分替换为初始化的变量
- 字符串替换函数c++
- 使用默认类型替换c++函数引用模板错误
- 在Std::to_string替换函数中无法识别Std::stringstream对象
- c++中的替换函数
- 替换函数'operator new'不能声明'inline' [-werror,-winline-new-delete]