【问题标题】:fabs() not found in VS2012 debug mode (ANSI C)在 VS2012 调试模式 (ANSI C) 中找不到 fabs()
【发布时间】:2013-08-23 21:55:31
【问题描述】:

我在 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”:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 啊,你对 fabs() 的看法是正确的。谢谢你,那是我的愚蠢。但是智能感知仍然让我难以理解,我确实打开了 Compile as C 标志并将代码存储为 .c 文件。也许这只是我们必须赖以生存的东西......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多