在VS2012调试模式(ANSI C)中找不到fabs()

时间:2013-08-23 12:08:11

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

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

SQRT()

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

  

IntelliSense:多个重载函数实例“sqrt”   匹配参数列表:

        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
}

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

enter image description here

我不确定发生了什么。似乎问题只发生在调试模式下。当我在命令行中运行已编译的程序.exe时,它可以正常工作。

1 个答案:

答案 0 :(得分:0)

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

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

当你进入该功能时,IDE会尝试显示代码,但是找不到它然后会给你一个错误。但是你可以继续调试,只需取消文件对话框,询问fabs.c的路径并使用“Step out”,它将在函数调用后返回到代码行。