C预处理器:#define一个可以在没有括号的情况下调用的宏

Mam*_*mma 12 c c-preprocessor

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

void Func(int x)
{
    printf("%d",x);
}

#define func Func x //or something

int main()
{
    func 10; //<---- remove parenthesis
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,func将指向真实函数Func,而10将是没有括号的参数.

我试图new在C++中实现类似于运算符的东西但在C中.

例:

class Base* b = new(Base);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,class是一个宏struct,new是一个带函数指针的函数,Base是一个为其分配内存的函数struct Base.

我想将代码重写为这样的代码:

class Base* b = new Base;
Run Code Online (Sandbox Code Playgroud)

如果我能想出一个宏,那将是可能的:)

Pet*_*ica 3

有趣的是,您可能只需定义newaway ( #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;
}
Run Code Online (Sandbox Code Playgroud)