gpt4 book ai didi

将 typeof 转换为字符串

转载 作者:太空狗 更新时间:2023-10-29 16:30:54 26 4
gpt4 key购买 nike

有没有办法把gcc的typeof扩展转成字符串,例如:

#define printType(a) printf("%s", #typeof(a))

这样我就可以:

int a = 4;
printf("Type of a is: ");
printType(a);

并得到输出:

Type of a is: int

一个可能的用法如下:

#include <stdio.h>

#define indirect_print(a) print_##typeof(a)(a)

void print_int(int *i) {
printf("%d", *i);
}

void print_char(char *c) {
printf("%c", *c);
}

int main(void) {
char C = 'C';
int I = 100;

{
char *a = &C;
indirect_print(a);
}

{
int *a = &I;
indirect_print(a);
}

return 0;
}

如果可能,它应该适用于所有类型,包括结构和 union ,而不依赖于手动将每种类型添加到列表中。

最佳答案

从 C11 开始,您可以使用泛型,请参阅 http://en.cppreference.com/w/c/language/generic .例如:

#define printType(a) printf("%s", _Generic( (a) , \
int : "int", \
long : "long", \
float : "float", \
default : "other type"))(a)

需要列出每种可以使用的类型。

在C++中,还有typeid关键字:

#include <typeinfo>
#define printType(a) std::cout << typeid(a).name() << std::endl;

关于将 typeof 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30438470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com