0

我在 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 时,它​​工作正常。

4

1 回答 1

0

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

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

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

于 2013-08-23T12:41:26.723 回答