c - 在 VS2012 Debug模式下找不到 fabs() (ANSI C)

标签 c visual-studio visual-studio-2012 math.h

我在 VS2012 中编译 ANSI-C(设置了 _CRT_SECURE_NO_WARNINGS)并且程序使用“math.h”。我遇到了以下问题:

sqrt()

VS2012的自动检查器会告诉我有一个错误

IntelliSense: more than one instance of overloaded function "sqrt" matches the argument list:

        function "sqrt(double _X)"
        function "sqrt(float _X)"
        function "sqrt(long double _X)"
        argument types are: (int)

但该项目仍将构建。这让我很困惑,因为我认为 C 不支持函数重载?

使用 fabs() 进行调试

项目构建后我尝试调试。当它跑到终点线时

char eq(double a, double b, double epsilon) {
    return (fabs(a - b) < epsilon); // problem
}

函数,它将构建,但在 Debug模式下它将生成一个错误页面“fabs.c not found”:

enter image description here

我不确定发生了什么事。看来问题只发生在 Debug模式下。当我在命令行中运行编译后的程序 .exe 时,它​​工作正常。

最佳答案

您的 sqrt() 问题是 Intellisense 的问题,Intellisense 是 IDE 的代码完成部分。它与编译代码无关。 Intellisense 可能始终默认为 C++,或者不知道您正在编译为 C 代码(它使用函数名称数据库进行查找)。你确定你是用C编译的吗?编译器有一个标志(您可以在解决方案、项目或文件属性中设置)来强制其编译为 C 或 C++,但如果您使用扩展名“.c”,它也将默认为 C。

fabs() 的问题正是当您尝试进入源代码不可用的代码时有时会发生的情况,这些代码通常是标准库中的函数,并且您使用的是 Visual Studio 的 Express 或 Standard 版本。专业版和更高版本的产品附带源代码,因此您应该能够使用这些产品进行调试。

当您单步执行该函数时,IDE 会尝试显示代码,但找不到它,然后会出现错误。但你可以继续调试,只需取消询问 fabs.c 路径的文件对话框并使用“Step out”,它就会回到函数调用后的代码行。

关于c - 在 VS2012 Debug模式下找不到 fabs() (ANSI C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18402466/

相关文章:

c - 将 printf 语句分配给 int 变量

visual-studio - Visual Studio 中方法的代码片段

c++ - 在 C++ 中复制现有的 cpp 文件

c++ - 使用 visual studio 2013 的 opencv 3.0.0 中有许多未定义的函数

c# - 公共(public)语言运行时检测到无效程序?

c - 使用 free() 释放内存不起作用

c++ - std::pow 给出分数指数的错误近似值

ios_base 类的 C++ 未声明标识符

c - 寄存器中使用 volatile

c# - Edmx 文件不在 TFS 源代码控制 VS2012 之下