2

我正在学习 C 两个月。我尝试了不同的 IDE,我的实验导致了混乱。因为例如在 NETBEANS 中,我可以在没有 stdlib.h 库的情况下使用 abs 函数,但是当我尝试在 Visual Studio 2012 中做同样的事情时,它给出了一个错误。或者 NETBEANS 中的一件非常奇怪的事情,我可以使用 math.h 库中的函数而无需声明该库。为什么会这样?有人可以帮忙吗?NETBEANS 使用 cygwin 编译器。

4

2 回答 2

4

在 C 中,您无需包含标题即可使用这些功能。不过,较旧的编译器并不总是对此发出警告。此外,不同的编译器可能以不同的方式提供这些功能;在某些情况下,它们不是函数而是宏。使用宏,您需要包含标题。

最好始终包含提供所需函数的标头,以便获得函数原型。这是编译器检查错误(例如,传递函数参数的正确类型)的唯一方法。如果调用没有原型的函数,则会得到该函数的隐式声明。这意味着编译器只是猜测并希望您正确使用该函数,但无法检查。这就是为什么这不适用于宏,因为宏不能有函数声明(隐式或非隐式)。

Visual Studio 给出错误的原因是因为它是 C++ 编译器,而不是 C 编译器。C++ 与 C 有点不同。不同之处之一是 C++ 不允许隐式函数声明。如果你没有声明你使用的函数(在这种情况下包括它们的头文件),那么这被认为是一个错误。C++ 主要与 C 兼容,但这恰好是为数不多的差异之一。

顺便说一句,它们不是图书馆。它们是头文件。有区别。您可以包含多个标准头文件,但您只有一个库;C 库。在大多数系统上,您还有一个数学库,它只包含数学函数。关键是几个头文件可以(并且通常是)同一个库的一部分。

于 2012-11-11T23:12:14.483 回答
0

我对 C 的体验是一样的。不同的编译器有不同的库,有时它们不遵守标准。一些编译器供应商试图将您锁定在 (XXXXX$XXX) :)

于 2014-02-27T23:48:59.707 回答