C宏获取typeof参数

cha*_*e55 3 c macros c-preprocessor

我正在尝试编写一个宏来协助C语言中的面向对象编程.当我将类信息存储在一个常量结构中时,我需要创建一个执行以下操作的宏:

  • 获取对象的类型(derefenced指针的类型)
  • 附加_info以获取所需classInfo结构的名称
  • 获取该符号的地址,以便将其传递给该函数
  • destroyObject使用指向类struct和对象本身的指针调用该函数

一个例子:

queue_t* p = NULL;
delete(p);
Run Code Online (Sandbox Code Playgroud)

delete 应该扩展到:

destroyObject(&(queue_t_info), p);
Run Code Online (Sandbox Code Playgroud)

我尝试使用这个宏,但我无法开始工作:

#define delete(X) (destroyObject(&(typeof(*X)##_info), X))
Run Code Online (Sandbox Code Playgroud)

我的部件类型无法正常工作.

nmi*_*lov 6

typeof不是宏,它是语言结构,它是由编译器扩展而不是预处理器.由于预处理在编译之前进行,因此宏无法访问typeof结果.

delete(p)的扩展到:(destroyObject(&(typeof(*p)_info), p)).(你可以通过-Egcc标志看到它)