我在VS2012中编译ANSI-C(设置了_CRT_SECURE_NO_WARNINGS),程序使用“math.h”。我遇到了以下问题:
VS2012的自动检查器会告诉我有错误
IntelliSense:多个重载函数实例“sqrt” 匹配参数列表:
function "sqrt(double _X)" function "sqrt(float _X)" function "sqrt(long double _X)" argument types are: (int)
但该项目仍将建成。它让我困惑,因为我认为C不支持函数重载?
项目构建后,我尝试调试。当它运行到行
char eq(double a, double b, double epsilon) {
return (fabs(a - b) < epsilon); // problem
}
函数,它将构建但在调试模式下它将生成错误页面“fabs.c not found”:
我不确定发生了什么。似乎问题只发生在调试模式下。当我在命令行中运行已编译的程序.exe时,它可以正常工作。
答案 0 :(得分:0)
您对sqrt()的问题是Intellisense的问题,它是IDE的代码完成部分。它与编译代码无关。 Intellisense可能总是默认使用C ++,或者不知道您正在编译为C代码(它使用函数名数据库来查找)。你确定你正在编译为C吗?编译器有一个标志(您可以在解决方案,项目或文件属性中设置)以强制它以C或C ++编译,但如果使用扩展名“.c”,它也将默认为C.
fabs()的问题就是当你试图进入源代码不可用的代码时,有时会发生这种情况,这通常是标准库中的函数,而你使用的是Visual Studio的Express或Standard版本。专业版和更高版本的产品随附源代码,因此您应该能够使用这些产品进行调试。
当你进入该功能时,IDE会尝试显示代码,但是找不到它然后会给你一个错误。但是你可以继续调试,只需取消文件对话框,询问fabs.c的路径并使用“Step out”,它将在函数调用后返回到代码行。