我想知道是否可以编写一个行为如下的宏:
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)
如果我能想出一个宏,那将是可能的:)
有趣的是,您可能只需定义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)