Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对编译器如何在c++;程序 我对C++编程很陌生,我对编译器在C++程序中包含标准库有点困惑。例如,假设我想使用sqrt()函数。我知道我必须在源代码中包含math.h头文件,但是math库包含许多函数,而不是sqrt()。所以我的问题是,所有这些函数都是源代码添加到程序中的,这是不必要的,还是仅仅是我需要的函数_C++_Include - Fatal编程技术网

对编译器如何在c++;程序 我对C++编程很陌生,我对编译器在C++程序中包含标准库有点困惑。例如,假设我想使用sqrt()函数。我知道我必须在源代码中包含math.h头文件,但是math库包含许多函数,而不是sqrt()。所以我的问题是,所有这些函数都是源代码添加到程序中的,这是不必要的,还是仅仅是我需要的函数

对编译器如何在c++;程序 我对C++编程很陌生,我对编译器在C++程序中包含标准库有点困惑。例如,假设我想使用sqrt()函数。我知道我必须在源代码中包含math.h头文件,但是math库包含许多函数,而不是sqrt()。所以我的问题是,所有这些函数都是源代码添加到程序中的,这是不必要的,还是仅仅是我需要的函数,c++,include,C++,Include,我希望我的问题是明确的,并提前表示感谢 不属于模板的函数(也不是简单到只有一行或两行)分别编译,然后存储在“库”中(库不是头文件,它只包含double-sqrt(double);或类似文件) 编译器将(给定正确的编译时标志)链接到包含这些函数的C库。链接器[由编译器调用]随后将引入构建库时编译的代码。因此,通常情况下,在构建程序时不会编译源代码-它是在其他时间完成的 链接器了解您正在构建的代码需要哪些函数,因此只将这些函数添加到您的程序中,而不是所有函数[但它可能会引入一些其他函数,而不是您所要

我希望我的问题是明确的,并提前表示感谢

不属于模板的函数(也不是简单到只有一行或两行)分别编译,然后存储在“库”中(库不是头文件,它只包含
double-sqrt(double);
或类似文件)

编译器将(给定正确的编译时标志)链接到包含这些函数的C库。链接器[由编译器调用]随后将引入构建库时编译的代码。因此,通常情况下,在构建程序时不会编译源代码-它是在其他时间完成的


链接器了解您正在构建的代码需要哪些函数,因此只将这些函数添加到您的程序中,而不是所有函数[但它可能会引入一些其他函数,而不是您所要求的精确函数,例如,
sqrt
]可能需要一些帮助函数和一些通用错误处理函数。

不是模板的函数(也不是简单到只有一行或两行)单独编译,然后存储在“库”中(库不是头文件,它只包含
double-sqrt(double);
或类似的内容)

编译器将(给定正确的编译时标志)链接到包含这些函数的C库。然后链接器[由编译器调用]将引入在构建库时编译的代码。因此,通常情况下,在构建程序时不会编译源代码-它是在其他时间完成的


链接器了解您正在构建的代码需要哪些函数,因此只将这些函数添加到您的程序中,而不是所有函数[但它可能会引入一些其他函数,而不是您要求的精确函数,例如,
sqrt
]可能需要一些帮助函数和一些通用错误处理函数。

否,链接意味着链接器会找出哪些符号(函数和数据对象)从您的库中获取的信息是构建程序所必需的,然后只包含这些信息

事实上,使用动态链接,它甚至不包括函数本身,只包括对函数的引用以及如何加载包含函数的库


一般来说,与可执行文件链接的库不是源代码,而是二进制对象,它们已经被翻译成机器语言(“编译”)。

否,链接意味着链接器会找出哪些符号(函数和数据对象)从您的库中获取的信息是构建程序所必需的,然后只包含这些信息

事实上,使用动态链接,它甚至不包括函数本身,只包括对函数的引用以及如何加载包含函数的库


通常,与可执行文件链接的库不是源代码,而是二进制对象,它们已经被翻译成机器语言(“编译”)。

您对库和头文件存在混淆。库是实现。头文件包含声明

对库文件使用
#include
,以便编译器可以找到所用函数的语法和语义

所有声明(除非被预处理器指令阻止)都由编译器解析并存储在字典中。不使用声明的唯一问题是它会占用编译器字典中的空间。通常这不是问题(现代编译器有大容量字典)

就向程序添加函数而言,这是在链接阶段处理的(通常由链接器应用程序处理)。这取决于编译器。基本上,只有程序使用的函数才会从库中提取(仅限于静态库)并放入可执行文件中。某些编译器可能会加快生成过程,并包含一些常用的函数组,但您可能不会使用这些函数组。这会加快生成处理器的速度,但会使可执行文件变大


某些库函数可能会使用其他库函数。这意味着库函数可能会向可执行文件中添加更多的代码。例如,
printf
printf
函数需要大量支持,而不仅仅是
put
,因为所有的格式说明符。因此,
printf
可能包括其他(内部)库函数。

在库和头文件之间存在混淆。库是实现。头文件包含声明

对库文件使用
#include
,以便编译器可以找到所用函数的语法和语义

所有声明(除非被预处理器指令阻止)都由编译器解析并存储在字典中。不使用声明的唯一问题是它会占用编译器字典中的空间。通常这不是问题(现代编译器有大容量字典)

就向程序中添加函数而言,这是在链接阶段(通常由链接器应用程序)处理的。这取决于编译器。从根本上说,只有程序使用的函数才会从库中提取(仅限于静态库)并放入