似乎(类型名)返回类型的默认值。
这到底是什么意思?C中不存在类型的默认值。您的两个printf行执行以下操作:
-
printf("value: %ld\n", ((time_t) -1));
在这里
-1
有类型
int
. 你强制转换
int
到
time_t
,后者具有未指定的格式,而不是“能够表示时间的真正类型”。
然后你对程序撒谎,说传递的值是类型
long int
.您调用未定义的行为,任何事情都可能发生。在你的特殊情况下,它似乎给出了原始价值
- 1
. 它还可以打印垃圾或导致程序崩溃。
这与
time()
函数,它在代码中的任何位置都不存在。
-
printf("value: %d\n", ((int) -1));
- 1
有类型
int
. 告诉编译器从
int
到
int
. 编译器出于礼貌,并不怀疑为什么你会写这么没有意义的代码,但可能只是预先处理它。
- 1
.
然后你告诉
printf
你想打印你的
int
有价值
- 1
作为一个
int
. 然后它就这样做了。
我浏览了C11语言规范N1570。但是我找不到关于上述用法的描述
见C11 5.5.4
铸造算子
和C17.21.6.1
fprintf函数
.