August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
一个程序一般包括几个独立的编译部分,称为编译单元。程序中每一个函数在所有编译单元中的声明类型必须严格一致。我们使用头文件来保证这一点,详见8.3节。并且,程序中的每个函数只能定义一次。如果上述两条规则的任意一条被违反的话,链接器将报错。如何避免链接错误将在8.3节中讨论。下面是一个典型的程序链接错误示例:
除非我们在另一个源文件中定义了area(),并且将这一源文件的编译单元与当前文件链接,否则的话,链接器将报告没有发现area()的定义。
同时,area()的定义必须与我们的调用具有严格相同的类型(包括返回值类型和参数类型)即:
具有相同名称但是类型不同的函数将不会被匹配上,并被忽略:
需要注意的是,函数名的拼写错误并不总会导致链接错误。实际上,当遇到一个未声明函数被调用时,编译器将立刻报告错误信息。这一点很好:编译错误早于链接时错误被发现有助于错误的及早排除。
正如上文所述,函数的链接规则同样适用于程序的其他实体,例如变量和类型:具有同一名字的实体只能有一个定义,但是可以有多个声明,所有声明必须具有相同的类型。详见8.2~8.3节。 ...