我想知道是否可以编写一个行为如下的宏:

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);

在这种情况下, classstruct 的宏, 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/

10-16 03:47