如何编写一个宏#define CONCATENATE(x)
,它将产生以下结果:
CONCATENATE(int); // Produce --> int
CONCATENATE(unsigned int); // Produce --> unsignedint
CONCATENATE(long long int); // Produce --> longlongint
etc.
结果可能与我上面写的不同。唯一的要求是结果是单个标记。我需要它是单个标记,因为此标记将用于定义名称包含此标记的函数,例如void Foo_longlongint(void);
编辑
我想使用一些宏技巧来创建泛型函数。例如,我们想声明一个泛型缓冲区:
#define DECLARE(type, size) struct {type buffer[size];}
现在我想为许多可能的类型创建函数,例如:
#define DEFINE_FUNCTION(type) \
void Buffer_##type##_Add(size_t idx, type *buffer, type data) \
{ \
buffer[idx] = data; \
}
2条答案
按热度按时间5jvtdoz21#
为什么不:
brqmpdu12#
明确地说:使用单独的类型名称和类型规范。
对于任何类型的泛型编码,C的工具集都非常有限,特别是如果你使用的是C99。最好避免任何技巧,即使这可能意味着更多的输入。