面试题答案
一键面试- 其他源文件能否调用该 static 函数:
- 其他源文件不能调用在一个源文件中定义的
static
函数。
- 其他源文件不能调用在一个源文件中定义的
- 原因:
- 在 C++ 中,
static
函数具有文件作用域。它的作用域被限制在定义它的源文件内部。这意味着该函数的名字在其他源文件中是不可见的,编译器不会在其他源文件中去查找这个static
函数的定义。
- 在 C++ 中,
- 编译链接角度解释作用域限制实现:
- 编译阶段:
- 编译器在编译每个源文件时是独立进行的。当编译器遇到一个
static
函数定义时,它会为该函数在当前源文件的符号表中创建一个条目。这个符号表只对当前源文件有效。
- 编译器在编译每个源文件时是独立进行的。当编译器遇到一个
- 链接阶段:
- 链接器的作用是将各个源文件编译后生成的目标文件链接在一起形成可执行文件。由于
static
函数的符号只存在于定义它的源文件对应的目标文件的符号表中,并且该符号具有内部链接属性(即对其他目标文件不可见),链接器不会在其他目标文件中查找该static
函数的引用。所以,其他源文件无法调用这个static
函数。这就实现了static
函数作用域限制在定义它的源文件内。
- 链接器的作用是将各个源文件编译后生成的目标文件链接在一起形成可执行文件。由于
- 编译阶段: