在C语言(或基于C语言)中,人们可以愉快地使用这句话:
#include "hello.h";
瞧,hello.h
中的每个函数和变量都是自动使用的。
但它实际上做了什么?我查看了编译器文档和教程并花了一些时间在线搜索,但我可以形成的关于神奇的#include
命令的唯一印象是它“复制粘贴”hello.h
的内容而不是那条线。还有更多。
答案 0 :(得分:24)
逻辑上,复制/粘贴正是如此。我担心它已经没有了。但是,您不需要;
。
您的具体示例包含在规范中, 6.10.2源文件包含部分,第3段:
表单
的预处理指令
# include
"
q-char-sequence"
new-line导致由
"
分隔符之间的指定序列标识的源文件的全部内容替换该指令。
答案 1 :(得分:6)
(复制/粘贴)正是#include "header.h"
所做的。
请注意#include <header.h>
或者当编译器找不到文件"header.h"
并且尝试#include <header.h>
时,它会有所不同。
答案 2 :(得分:0)
不是,不。编译器将原始文件描述符保存在堆栈上并打开#include
d文件;当它到达该文件的末尾时,它会关闭它并弹回原始文件描述符。这样,它几乎可以任意嵌套#include
d个文件。
答案 3 :(得分:0)
&#34; #include&#34;陈述&#34;抓住注意力&#34;预处理器(在程序实际编译之前发生的过程)和#34;告诉&#34;预处理器包括&#34; #include&#34;之后的任何内容。声明。虽然预处理器可以被告知要做很多事情,但在这种情况下,它被要求识别一个头文件(用#34; .h&#34表示;跟随该头的名称,表明它是标题)。现在,标头是一个包含C声明的文件和未在代码中明确定义的函数定义。这是什么意思?好吧,如果你想使用一个函数或定义一个特殊类型的变量,并且你知道这些函数/定义是在其他地方定义的(比如标准库),你可以只包括(#include)你知道包含的头文件你需要什么。否则,每次您想要使用打印功能(如您的情况),您都必须重新创建打印功能。如果它没有在您的代码中明确定义,并且您没有#include包含您正在使用的函数的头文件,那么您的编译器会抱怨说&#34;嘿!我不知道这个函数的定义在哪里,所以我不知道你的代码中有这个未定义函数的内容!&#34;。
答案 4 :(得分:-1)
它是预处理器的一部分。看看http://en.wikipedia.org/wiki/C_preprocessor#Including_files。是的,它只是复制和粘贴。
答案 5 :(得分:-1)
这是回答这个问题的好链接。
http://msdn.microsoft.com/en-us/library/36k2cdd4.aspx
通常#include和#include“path-name”只是按预处理器搜索的顺序不同