符号之来龙去脉

来源:互联网 发布:淘宝联盟网站推广位 编辑:程序博客网 时间:2024/05/06 20:58

1.符号修饰与函数签名诞生的背景和条件:

   20世纪70年代,编译器编译源代码产生目标文件时,符号与相应的变量和函数的名字是一样的.后来Unix平台和C语言

   发明时,已经存在了相当多的使用汇编编写的库和目标文件.这样问题就产生了,一个C程序要使用这些库的话,C语言

   中不可以使用这些库中定义的函数和变量的名字作为符号名,否则将会跟现有的目标文件冲突.

 

   为了防止类似的符号名冲突,Unix下的C语言就规定,C语言源代码中的所有全局变量和函数经过编译后,相对应的符号名

   前加上下划线"_".而Fortran语言的源代码经过编译以后,所有的符号前后都加上"_".

   

    这种简单而原始的方法的确能够暂时减少多种语言目标文件之间的符号冲突的概率,但是没有从根本上去解决符号冲突的问题.

    a. 对不同语言源代码编译后生成的目标文件中添加上不同的符号约束,但是同一种语言的符号冲突问题还是没有解决.

    b. 由于模块是协同开发的原因,导致出现的符号冲突概率更大. 如果想要减少冲突,那么就要制定相当复杂和繁琐的编码规范.

修饰和函数签名.至于其中的相关细节,我想这些没必要讨论,其原理是很简单的:

         使用名称修饰和函数签名就是为了使避免产生符号冲突.使用一定的机制使源代码中的符号在生成的目标文件中能够保持


0 0
原创粉丝点击