【发布时间】:2017-09-08 21:51:43
【问题描述】:
首先让我承认通过以不重叠的方式命名类型和变量很容易避免这种情况。
不过,我很好奇以下情况会发生什么:
typedef char jimmypage;
jimmypage *jimmypage;
sizeof(jimmypage) 是否等同于 sizeof(char) 或 sizeof(char *)?
【问题讨论】:
-
我相信它实际上不会编译,你不只是尝试了吗?
-
我认为需要 sizeof(char*)
-
我的编译器 (gcc 6.3.0) 出现错误,
jimmypage *jimmypage;使用的是什么编译器/版本? -
省略括号也很容易避免混淆。毕竟,
sizeof是一个运算符,而不是一个函数。如果typedef char jimmypage;在周围块中,而jimmypage *jimmypage;在内部块中,则代码编译。那么sizeof jimmypage总是指指针类型的大小(char *);sizeof *jimmypage总是指指向类型的大小 (char)。最后一个的好处是它总是会产生正确的大小。如果将变量声明更改为long *jimmypage;,则为sizeof *jimmypage == sizeof long。
标签: c language-lawyer typedef sizeof