我想知道是否可以编写一个行为如下的宏:
void Func(int x)
{
printf("%d",x);
}
#define func Func x //or something
int main()
{
func 10; //<---- remove parenthesis
}
在这种情况下,
func
将指向实际函数 Func
, 10 将是不带括号的参数。我试图在 C++ 中实现类似于
new
运算符的东西,但在 C 中。例子:
class Base* b = new(Base);
在这种情况下,
class
是 struct
的宏, new
是一个函数,它接受一个函数指针, Base
是一个为 1813 分配内存的函数,它为 18133141 133141我想将代码重写为这样的:
class Base* b = new Base;
如果我能想出一个宏,这将是可能的:)
最佳答案
有趣的是,您可能只需定义 new
away ( #define new
) 并为每个类似构造函数的函数定义一个标记,该函数会产生一个带括号的真实函数调用,例如 #define BASE Base()
。
这应该使以下代码合法 C:
#define new
#define class struct
#define BASE Base()
// forward declaration
class Base;
extern class Base *Base();
void f()
{
class Base* b = new BASE;
}
关于C 预处理器 : #define a macro that can be called without parentheses,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33563071/