有没有办法在 C 中打印出变量/指针的类型?
Posted
技术标签:
【中文标题】有没有办法在 C 中打印出变量/指针的类型?【英文标题】:Is there a way to print out the type of a variable/pointer in C? 【发布时间】:2011-01-10 18:20:46 【问题描述】:我想打印出(或以其他方式确定)我的程序中某个变量的类型。有什么好的方法吗?好的,我的意思是一种有效的方式,即使它意味着故意抛出编译器错误。
例如:
client.c:55: error: incompatible types in assignment
是我现在遇到的错误。我想告诉我这样的事情:
client.c:55: error: attempting to assign type struct a to type struct b
或者我可以这样使用的函数:
printf(gettype(x));
会输出:
struct b
【问题讨论】:
如果不编译怎么能“工作”? 如果它“抛出编译器错误”,它如何工作? 我所说的“工作”是指它为我提供了类型,以便我可以修复程序中的错误。查看编辑。 一些编译器允许详细设置 - 试试看。否则只看代码。一个不错的 IDE 通常会自动查找变量的类型,因此您可以通过悬停或右键单击变量名称来查看类型。 要增加详细程度,请为您的 gcc 编译器提供 -Wall -pedantic 选项。这应该会给你一些关于你的错误的额外信息。 【参考方案1】:我刚刚发现了如何做到这一点。
printf("%d", variable);
如果变量不是 int,则 gcc -Wall
会抱怨类型不匹配 - 并将打印出变量的类型,这正是您要查找的。p>
【讨论】:
当您处于不知道在哪里查找资料的环境中时很有用(例如,在我的情况下,使用 yacc 进行编程)。 这在使用数组类型时会产生误导,这些类型在传递给printf
时会衰减为指针。【参考方案2】:
尝试使用 GDB 进行调试,它将打印与变量关联的所有属性,包括它的类型。但是,您的程序应该在使用 GDB 之前进行编译。
【讨论】:
如果构建失败,你不能这样做【参考方案3】:在 C 中,您在声明变量时提供了一个类型。这是编译器在抱怨分配时拥有的唯一信息(也就是说,它不会使用对象的运行时类型,而是使用您拥有的静态类型)。
转到代码,找到第 55 行,检查那里有哪些变量并找到代码中的类型。在 C 中甚至没有重载,类型与任何语言一样静态和简单。
【讨论】:
【参考方案4】:如果您使用 gcc 或与 gcc 兼容的编译器,那么您可以使用(显然是非标准且不可移植的)typeof 关键字,其工作方式与 sizeof 非常相似。
【讨论】:
很遗憾,您无法从typeof
中获取字符串。 (虽然在 g++ 上你可以使用typeid(typeof(x)).name()
。)
从C11开始,也可以使用_Generic
到to get the variable's type。【参考方案5】:
如果您使用gdb
进行调试。
然后你可以设置一个断点:
break line_number
在您想要获取该变量类型的地方中断执行。
从那时起,您可以使用以下命令在 gdb 中打印变量的类型:
ptype your_variable_name
要么
whatis your_variable_name
最后一个将打印变量的类型以及你给它的定义。
【讨论】:
以上是关于有没有办法在 C 中打印出变量/指针的类型?的主要内容,如果未能解决你的问题,请参考以下文章