我知道C中的静态函数允许只在该文件的范围内调用该特定函数.我感兴趣的是这是怎么发生的.它是放在内存的特定部分还是编译器对该函数应用特定操作.可以将相同的过程应用于汇编中的函数调用吗?
AnT*_*AnT 13
声明一个函数static并不能真正阻止它从其他翻译单元调用.
什么static做的是它可以防止功能被称为(链接通过名称从其他翻译单元).这将消除直接调用该函数的可能性,即"按名称"调用.为此,编译器只是从翻译单元导出的外部名称表中排除函数名称.除此之外,静态函数绝对没有什么特别之处.
您仍然可以通过其他方式从其他翻译单元调用该功能.例如,如果您以某种方式获得了指向static其他翻译单元中的函数的指针,则可以通过该指针调用它.
函数和其他名称将作为符号导出到目标文件中.链接器使用这些符号在链接时解析所有类型的悬空引用(例如,调用另一个文件中定义的函数).声明它时static,它不会被导出为符号.因此,它不会被任何其他文件拾取.如果你有一个函数指针,你仍然可以从另一个文件中调用它.