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



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

最佳答案

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

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

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

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

10-11 16:49