我在 VS2012 中编译 ANSI-C(设置了 _CRT_SECURE_NO_WARNINGS)并且程序使用“math.h”。我遇到了以下问题:
sqrt()
VS2012的自动检查器会告诉我有一个错误
IntelliSense: more than one instance of overloaded function "sqrt" matches the argument list:
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
}
函数,它将构建,但在 Debug模式下它将生成一个错误页面“fabs.c not found”:
我不确定发生了什么事。看来问题只发生在 Debug模式下。当我在命令行中运行编译后的程序 .exe 时,它工作正常。
最佳答案
您的 sqrt() 问题是 Intellisense 的问题,Intellisense 是 IDE 的代码完成部分。它与编译代码无关。 Intellisense 可能始终默认为 C++,或者不知道您正在编译为 C 代码(它使用函数名称数据库进行查找)。你确定你是用C编译的吗?编译器有一个标志(您可以在解决方案、项目或文件属性中设置)来强制其编译为 C 或 C++,但如果您使用扩展名“.c”,它也将默认为 C。
fabs() 的问题正是当您尝试进入源代码不可用的代码时有时会发生的情况,这些代码通常是标准库中的函数,并且您使用的是 Visual Studio 的 Express 或 Standard 版本。专业版和更高版本的产品附带源代码,因此您应该能够使用这些产品进行调试。
当您单步执行该函数时,IDE 会尝试显示代码,但找不到它,然后会出现错误。但你可以继续调试,只需取消询问 fabs.c 路径的文件对话框并使用“Step out”,它就会回到函数调用后的代码行。
关于c - 在 VS2012 Debug模式下找不到 fabs() (ANSI C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18402466/