#error : ERROR: Use of C runtime library internal header file. 这错误什么意思?

unhappyless_16 2007-02-05 07:35:09
#include<time.h>
#include<..\crt\src\ctime.h> //我用的是 VS2005 ,其他编译器可能要还相对路径
#include<iostream>
using namespace std;
int main()
{
time_t biggest=0x7fffffffffffffffI64; //15 个 f
cout<<_MAX__TIME64_T<<endl;

return 0;
}

在 ctime.h 里有

#define _MAX__TIME64_T 0x793406fffi64 /* number of seconds from
00:00:00, 01/01/1970 UTC to
23:59:59. 12/31/3000 UTC */

但包含后编译出错:
#error : ERROR: Use of C runtime library internal header file.

MSDN 上是这么解释的:

The error messages include the argument token-string and are currently not subject to macro expansion. These directives are most useful for detecting programmer inconsistencies and violation of constraints during preprocessing. The following example demonstrates error processing during preprocessing:

#if !defined(__cplusplus)
#error C++ compiler required.
#endif


When #error directives are encountered, compilation terminates.
...全文
3243 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
unhappyless_16 2007-02-10
  • 打赏
  • 举报
回复
taodm(taodm)

你把那行定义拷到自己的文件里就可以了。

===================================================================

这么做的话,好象问题没得到根本解决,若事先不知道_MAX__TIME64_T 的值,那又怎么办?

taodm 2007-02-09
  • 打赏
  • 举报
回复
你把那行定义拷到自己的文件里就可以了。
unhappyless_16 2007-02-09
  • 打赏
  • 举报
回复
To: Kenmark(fenix)

……不要去#include crt下面的东西,因为编译器会根据使用的原型库,自动编译实现文件,多次包含会出错


-------------------------------------------------------------------------------

不包含的话,那常量(_MAX__TIME64_T)就未定义了


==================================================================================

To: todototry()

预编译的选项里加上_CRTBLD
--------------------------------------------------
具体是在哪加?对编译器不熟,加这又是什么意思?
todototry 2007-02-08
  • 打赏
  • 举报
回复

预编译的选项里加上_CRTBLD
我啃 2007-02-08
  • 打赏
  • 举报
回复
VC的编译器INCLUDE:
include文件夹是默认include目录,提供函数原型定义以及一些宏,常数
crt文件夹是include里面的库的实现文件,编译时,我们只要#include "..\include\"下的文件就可以了,就是只要#include <iostream>就可以了,不要去#include crt下面的东西,因为编译器会根据使用的原型库,自动编译实现文件,多次包含会出错
user_csc 2007-02-06
  • 打赏
  • 举报
回复
#include<..\crt\src\ctime.h>



改成#include"..\\crt\\src\\ctime.h"

要么改成绝对路径哦~~~
#include"c:\\crt\\src\\ctime.h"
mathe 2007-02-06
  • 打赏
  • 举报
回复
就是说,这个头文件是C运行库编写时内部使用的,而调用这个库的用户不应该包含这个头文件。所以为了避免用户错误包含这个头文件,头文件里面自己做了检查,添加了#error语句,来阻止用户自己包含这个头文件,正如现在楼主做的。
逸学堂 2007-02-06
  • 打赏
  • 举报
回复
错误:使用C运行库内部文件
对于这个问题,如果仅仅是为了使用_MAX__TIME64_T的值

可以自己定义这个宏
#define _MAX__TIME64_T 0x100000000000i64 /* number of seconds from
00:00:00, 01/01/1970 UTC to
23:59:59. 12/31/2999 UTC */

至于为什么不能直接include引用,原因确实不知
todototry 2007-02-06
  • 打赏
  • 举报
回复
预编译的选项里加上_CRTBLD
unhappyless_16 2007-02-06
  • 打赏
  • 举报
回复
但 _MAX__TIME64_T 在这头文件中定义呀 ,不包含的话会有未定义错误
taodm 2007-02-06
  • 打赏
  • 举报
回复
根本就不要去包含这个头文件。
unhappyless_16 2007-02-06
  • 打赏
  • 举报
回复
Polarislee

CRT的内部头文件是不能够被应用程序直接包含的。

==============================================================================

是不是应用程序只能包含 include 文件夹里的东西?
unhappyless_16 2007-02-06
  • 打赏
  • 举报
回复
Wolf0403

#include<..\crt\src\ctime.h> //我用的是 VS2005 ,其他编译器可能要还相对路径

不应该去包含这个文件。

==============================================================================

为什么不能包含,ctime.h 和其他头文件没什么区别呀?
北极猩猩 2007-02-06
  • 打赏
  • 举报
回复
Kenmark(fenix) ( ) 信誉:100 Blog 2007-2-5 19:39:34 得分: 0
不用去INCLUDE crt下面的东西,编译器会自动寻找原型对应的实现代码

=================================================================

CRT的内部头文件是不能够被应用程序直接包含的。



Wolf0403 2007-02-06
  • 打赏
  • 举报
回复
#include<..\crt\src\ctime.h> //我用的是 VS2005 ,其他编译器可能要还相对路径

不应该去包含这个文件。
飞哥 2007-02-06
  • 打赏
  • 举报
回复
肯定头文件内有什么特殊的 宏判断

而没有定义那个宏
cutftp 2007-02-06
  • 打赏
  • 举报
回复
路径不对吧
unhappyless_16 2007-02-05
  • 打赏
  • 举报
回复
up
unhappyless_16 2007-02-05
  • 打赏
  • 举报
回复
up
unhappyless_16 2007-02-05
  • 打赏
  • 举报
回复
不加相对路径会找不到
加载更多回复(1)

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧