似乎(type-name)
返回该类型的默认值。
考虑以下代码:
#include <time.h>
#include <stdio.h>
int main() {
printf("value: %ld\n", ((time_t) -1));
printf("value: %d\n", ((int) -1));
}
使用gcc code.c
进行编译。运行./.aout
会产生:
value: -1
value: -1
我在GCC 8.1.0
上使用Ubuntu 16.04.5 LTS
。
TIME(2) man page包含以下文本:
发生错误时,将返回((time_t)-1),并且已正确设置errno。
我浏览了C11语言规范N1570。但是我找不到有关上述用法的描述。
答案 0 :(得分:2)
似乎(type-name)返回该类型的默认值。
那什至是什么意思? 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}}作为-1
。然后做到这一点。
我浏览了C11语言规范N1570。但是我找不到有关上述用法的说明
请参见C11 6.5.4