当你不知道一个变量类型的完整定义时可以采取的操作

Posted Chang Zhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当你不知道一个变量类型的完整定义时可以采取的操作相关的知识,希望对你有一定的参考价值。

参考来源:https://stackoverflow.com/questions/9073667/where-to-find-the-complete-definition-of-off-t-type

在Linux下编程时,或者说在一个有很多头文件互相 include 的场景中,经常会遇到不清楚一个变量的完整类型定义的情况(因为有用 typedef 封装),从而有可能遇到编译出错。例如在使用 stat 来读取文件属性的 i-node number 时,查看 stat 的手册,得知这个变量 st_ino 的变量类型是 ino_t,而我们不清楚 ino_t的准确定义究竟是什么。

一般来说可以猜想其是 int 或者 long int,但如果编程时报错,而需要准确得知其变量类型应该怎么办呢?

可以用如下方法:声明一个这样的变量即可。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int main() {
  ino_t blah;

  return 0;
}

然后运行如下指令:

gcc -E test.c | grep ino_t

-E 选项的意思是:在预处理过程后结束并输出到标准输出。

-E Stop after the preprocessing stage; do not run the compiler proper. The output is in the form of preprocessed source code, which is sent to the standard output.

输出如下:

可以得知,这个变量是无符号长整型。debug 原来的代码,把占位符从 %d 改成 %ld,也就能编译通过了。

参考来源:https://stackoverflow.com/questions/9073667/where-to-find-the-complete-definition-of-off-t-type

以上是关于当你不知道一个变量类型的完整定义时可以采取的操作的主要内容,如果未能解决你的问题,请参考以下文章

C++变量类型

C/C++ 判断一个变量的类型(typeid)

java中的引用类型和值类型

四两拨千斤——你不知道的VScode编码TypeScript的技巧

你不知道的mysql varchar

你不知道的js