为何已包含time.h仍出现CLK_TCK未声明错误?附相关疑问
关于
CLK_TCK未声明及错误提示差异的解答 问题1:为何包含time.h仍出现CLK_TCK未声明的错误?
CLK_TCK是C89标准中定义的过时宏,用于表示时钟每秒的滴答数,但在C99及之后的C标准中已被废弃,不再被标准time.h头文件提供。
ideone.com使用的编译器默认遵循较新的C标准(如C11/C17),所以即便你包含了time.h,编译器也不会提供这个已废弃的宏,因此会触发未声明的错误。
CLK_PER_SEC是C标准推荐的替代宏,功能与CLK_TCK一致,且在C99及后续标准中合法,兼容性更好。
问题2:为何错误提示建议使用CLOCK_TAI而非CLK_PER_SEC?
这是编译器错误提示的候选匹配逻辑导致的:CLOCK_TAI是POSIX标准定义的时钟标识符(用于标识国际原子时时钟),它的命名结构和CLK_TCK类似(均以CLK_/CLOCK_开头),因此被编译器作为相近名称候选给出提示,但二者用途完全不同——CLOCK_TAI是时钟类型标识,CLK_TCK是时钟频率值,这个提示实际上有误导性。
其他案例中推荐CLK_PER_SEC,是因为它才是CLK_TCK的标准替代项,和原宏用途一致,更贴合你的实际需求。
内容的提问来源于stack exchange,提问作者XYJ
相关产品推荐
相关产品推荐

