不包含stdlib.h时,strtod结果诡异

平常心006 2014-02-11 10:46:47
我的测试程序中调用了strtod,不包含stdlib.h头文件时结果诡异。
包含stdlib.h头文件时,结果是对的。
百思不得其解,望大家帮帮忙啊

我使用的编译命令:gcc t.c
运行:./a.out

下面是t.c文件:
#include <stdio.h>
//#include <stdlib.h>

int main(void)
{
char szBuf[] = "123.123";
double fRslt = strtod(szBuf, NULL);
printf("%f\n", fRslt);

return 0;
}
...全文
112 点赞 收藏 7
写回复
7 条回复
赵4老师 2014年02月12日
引用 6 楼 ielxd1989 的回复:
[quote=引用 5 楼 zhao4zhong1 的回复:] 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
这种代码在vc6中是编不过的,gcc这样可以编过,很容易坑人啊。[/quote] 研究一下gcc的命令行选项: [root]# gcc --help [root]# gcc -v --help
回复 点赞
平常心006 2014年02月12日
引用 5 楼 zhao4zhong1 的回复:
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
这种代码在vc6中是编不过的,gcc这样可以编过,很容易坑人啊。
回复 点赞
赵4老师 2014年02月12日
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
回复 点赞
平常心006 2014年02月12日
引用 3 楼 zhao4zhong1 的回复:
搜“隐式声明”
隐式声明都是以int作为返回值类型的。 而strtod实际上返回的是double,会不会是编译器生成代码时,按照整形返回值来取strtod的结果,导致取到的返回值不正确呢?
回复 点赞
赵4老师 2014年02月11日
搜“隐式声明”
回复 点赞
平常心006 2014年02月11日
引用 1 楼 FancyMouse 的回复:
你开-Wall编译看看它给你啥警告
[root@localhost Test]# gcc -Wall t.c t.c: 在函数‘main’中: t.c:7: 警告:隐式声明函数‘strtod’
回复 点赞
FancyMouse 2014年02月11日
你开-Wall编译看看它给你啥警告
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告