函数在可执行文件中的位置

MBy*_*ByD 4 c compiler-construction linker

C标准中是否有要求编译(和链接)二进制文件中的函数将出现在C文件中的有序中?

请假设在下面的示例中,编译器没有删除/内联任何函数,它们都存在于二进制文件中.问题不在于编译器可能对空函数做什么,而是关于函数的顺序.

例如,如果我编译example.c:

void bar() {  }
void foo() {  bar();  }
int main() {   foo();  }
Run Code Online (Sandbox Code Playgroud)

我可以确定输出文件中foo会出现bar这种情况吗?

小智 5

不,C标准没有这样的要求.在编译和链接方面,仅明确提及函数的特定属性,例如外部或静态链接等,但即使这些也以与实现无关的方式进行描述.到目前为止,在任何标准文档中都没有任何条款(据我所知),它强加了对可执行文件中符号顺序的期望.