私はCマクロを作成しようとしています。このマクロには、型名が追加_info
され、そのアドレスを取得して、それを使用して関数を呼び出します。サンプルコード(機能しません):
#define new(X) __new(&(X_info))
struct classInfo
{
size_t size;
void* (*constructor)(void* p);
};
void* __new(struct classInfo* info, ...)
{
return info->constructor(malloc(info->size));
}
void* queue_constructor(void* p)
{
return p;
}
typedef struct
{
uint64_t data;
} queue_t;
const struct classInfo queue_t_info = { .size = sizeof(queue_t),
.constructor = &queue_constructor};
int main(int argc, char** argv)
{
queue_t* p = new(queue_t);
return 0;
}
プリプロセッサは、未定義のシンボルについてエラーが発生しているため、Xを拡張したくないようですX_info
。これを修正するためにマクロで何を変更すべきかわからない。