gpt4 book ai didi

c - 在没有 stdlib 的情况下调用 atoi 是未定义的行为吗?

转载 作者:行者123 更新时间:2023-12-02 09:33:12 26 4
gpt4 key购买 nike

调用atoi是否不包含stdlib.h未定义的行为?即使我使用了 atoi,我也找不到在项目中包含 stdlib.h 的位置。事实上,atoi 一直工作正常 - 每次使用该软件时它都能正确解析整数。它是一些嵌入式设备。那么有没有可以很好定义的情况?


顺便说一句。在这一行中:

#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#include "sdkGlob.h"


#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */

该 header 包含 stdlib.h 但我无法理解在什么情况下包含它。我不确定这个 cplusplus 是否在任何地方定义。无论如何,这是一个 C 项目。

最佳答案

在 C99 之前,使用以前未声明的函数是可以接受的。编译器可能会生成警告,但不会出现错误,直到链接器找不到该函数或找到具有与编译器猜测的签名不同的签名的同名函数。幸运的是,编译器总是猜测返回类型为 int

在 C99 中,函数声明必须可见,但并非所有编译器都严格执行该规则。

根据 Random832 的评论,sdkGlob 也很可能仅包含 stdlib 本身。

至于您的另一个问题:sdkGlob 始终包含在内,但如果通过 C++ 编译器而不是 C 编译器运行,您还会得到 extern "C"{ .. } 包装。这告诉 C++ 编译器不要修改名称,以便您可以链接到使用普通 C 编译器构建的该模块的版本。这是提供纯 C 库的正常方法,允许 C 和 C++ 代码使用它们。

关于c - 在没有 stdlib 的情况下调用 atoi 是未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30644715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com