<分区>
我在 C 中尝试使用 typedef
变量时遇到的一个问题是弄清楚已经 typedef
的实际原始类型是什么,所以我尝试使用 printf
打印其值时,可以使用适当的 %
说明符。大多数时候我必须引用 gcc
产生的警告。例如,当使用 stat
系统调用时,返回的结构有很多具有不同 typedef
类型的成员,例如 dev_t
、 ino_t
、mode_t
等,我通常不得不猜测格式说明符可能是什么,然后编译器会警告我,我会更正它:
stat_demo.c: In function ‘main’:
stat_demo.c:46:45: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘__blksize_t’ {aka ‘long int’} [-Wformat=]
46 | printf("block size for file system IO: %d\n", s->st_blksize);
| ~^ ~~~~~~~~~~~~~
| | |
| int __blksize_t {aka long int}
| %ld
这是大多数人在打印时使用 typedef 的方式吗?这不是违背了要点吗,因为您需要知道 typedef
的实际原语是什么?有没有更好的方法来完全抽象实际类型?