为什么这样也能编译?

gjl606 2009-11-02 09:38:22
VC6.0 console程序,
main.c文件

#include <stdio.h>
#include <windows.h>

int main()
{
const char *bBuffer="First message from server to client!";
size_t dLen=strlen(bBuffer)+1;
}

strlen函数在string.h文件中,但我并没有include,这样也能编译通过;
经测试,把windows.h去掉,不能编译通过;
难道windows.h已经include了string.h?但我在windows.h并没有找到string.h。。
疑惑中
...全文
80 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gjl606 2009-11-03
  • 打赏
  • 举报
回复
对于console程序,cl编译时默认指定/ML 链接LIBC.LIB, strlen printf等CRT函数都在这个lib库里面,所以。。。。
gjl606 2009-11-02
  • 打赏
  • 举报
回复
懂了
jackyjkchen 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 akirya 的回复:]
引用 1 楼 jackyjkchen 的回复:
当VC的扩展名位.c时,会自动包含常用的C标准库。

int main()
{
printf("1234");
}

没有stdio.h照样能用

c程序  默认只包含了stdio.h
[/Quote]

才不是呢,这也能编译,你试试看,string.h和stdlib.h都自动包含了

int main()
{
int c = strlen("123");
system("pause");
}
zgjxwl 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 akirya 的回复:]
windows.h 包含了 windef.h
windef.h 包含了winnt.h
winnt.h 包含了string.h
[/Quote]
原来如此。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]
当VC的扩展名位.c时,会自动包含常用的C标准库。

int main()
{
printf("1234");
}

没有stdio.h照样能用
[/Quote]
c程序 默认只包含了stdio.h
arong1234 2009-11-02
  • 打赏
  • 举报
回复
说明windows.h间接包含了定义了strlen的头文件呗
  • 打赏
  • 举报
回复
windows.h 包含了 windef.h
windef.h 包含了winnt.h
winnt.h 包含了string.h
zgjxwl 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]
当VC的扩展名位.c时,会自动包含常用的C标准库。

int main()
{
printf("1234");
}

没有stdio.h照样能用
[/Quote]
以前还不知道。。。有这么回事。
lingyin55 2009-11-02
  • 打赏
  • 举报
回复
对于一些常用的函数,有些编译器会自动包含它所在的头文件。
jackyjkchen 2009-11-02
  • 打赏
  • 举报
回复
改成cpp就不行了
jackyjkchen 2009-11-02
  • 打赏
  • 举报
回复
当VC的扩展名位.c时,会自动包含常用的C标准库。

int main()
{
printf("1234");
}

没有stdio.h照样能用

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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