链接器如何找到正确的文件来使用它的函数声明?

时间:2012-02-15 02:49:57

标签: c++ linker prototype declaration

在一个简单的程序中,使用函数doSomething()打印出“hello,world”。我只在main.cpp文件中输入了这个函数的原型,并在另一个名为do.cpp的文件中输入了该函数的声明。

当我编译程序时它运行正常,即使我没有指定doSomething()的声明将是哪个文件。

2 个答案:

答案 0 :(得分:0)

您对功能声明定义的想法似乎有些混乱。
函数的声明是函数的原型 对于Ex:

void doSomething();

虽然,定义是函数的主体 对于Ex:

 void doSomething()
 {
 }

通常,声明包含在头文件和cpp文件中的定义中。

编译器使用声明来匹配被调用函数的参数,而链接器将定义链接到被调用的函数。

编译是将源文件编译到目标文件的过程 在链接期间,链接器使用所有目标文件来生成可执行文件。链接器可以访问不同的目标文件,因此可以访问其他文件中定义的函数。只要函数名称是唯一的,链接器就会愉快地链接到该特定的定义,以防链接器找到两个以上的匹配项,然后程序中断 One definition rule 并会报告多个定义错误。

另外,请注意链接器只有在调用函数时才需要使用(链接)函数定义,如果你的程序只是声明一个函数,不提供定义而且从不使用(调用)函数那么是任何错误。

答案 1 :(得分:0)

在查找函数定义时,链接器将简单地考虑您要链接的所有文件。

无法链接定义同名函数的多个目标文件,因此没有歧义。