我正在学习C 2个月。我尝试了不同的IDE,我的实验导致了混乱。因为例如在NETBEANS中,我可以使用没有stdlib.h库的abs函数,但是当我在Visual Studio 2012中尝试做同样的事情时,它给出了一个错误。或者NETBEANS中的一个非常奇怪的事情我可以使用math.h库中的函数而不声明库。为什么会这样?有人可以帮忙吗? NETBEANS使用cygwin编译器。
答案 0 :(得分:4)
在C中,您无需包含标题即可使用这些功能。但是,较旧的编译器并不总是对此提出警告。此外,不同的编译器可能以不同的方式提供这些功能;在某些情况下,它们不是功能而是宏。使用宏,您需要包含标题。
始终包含提供所需功能的标题是一种很好的做法,这样您就可以获得函数原型。这是编译器检查错误的唯一方法(例如,传递函数参数的正确类型。)如果调用一个没有原型的函数,则会获得该函数的隐式声明。这意味着编译器只是猜测并希望你正确使用该函数,但无法检查。这就是为什么这不能用于宏,因为宏不能有一个函数声明(隐式或不是。)
Visual Studio出错的原因是因为它是C ++编译器,而不是C编译器。 C ++与C略有不同。其中一个不同之处在于C ++不允许隐式函数声明。如果你没有声明你使用的函数(在这种情况下包括它们的头文件),那么这被认为是一个错误。 C ++主要与C兼容,但这恰好是为数不多的差异之一。
不过,他们不是图书馆。他们是头文件。有区别。您可以包含几个标准标题,但只有一个库; C库。在大多数系统中,您还有一个数学库,它只包含数学函数。但重点是几个头文件可以(通常是)同一个库的一部分。答案 1 :(得分:0)
我对C的经历是一样的。不同的编译器有不同的库,有时它们不符合标准。 一些编译器供应商试图锁定你(XXXXX $ XXX):)