2011年12月30日

摘要: 约在20世纪70年代以前,编译器编译源代码产生目标文件时,符号名与相应的变量和函数的名字是一样的。比如一个汇编源代码里面包含了一个函数foo,那么汇编器将它编译成目标文件以后,foo在目标文件中的相对应的符号名也是foo。当后来UNIX平台和C语言发明时,已经存在了相当多的使用汇编编写的库和目标文件。这样就产生了一个问题,那就是如果一个C程序要使用这些库的话,C语言中不可以使用这些库中定义的函数和变量的名字作为符号名,否则将会跟现有的目标文件冲突。比如有个用汇编编写的库中定义了一个函数叫做main,那么我们在C语言里面就不可以再定义一个main函数或变量了。同样的道理,如果一个C语言的目标文件 阅读全文
posted @ 2011-12-30 16:16 Hibernate4 阅读(2048) 评论(0) 推荐(1) 编辑
摘要: “C”或者“C++”函数在内部(编译和链接)通过修饰名识别。修饰名是编译器在编译函数定义或者原型时生成的字 符串。有些情况下使用函数的修饰名是必要的,如在模块定义文件里头指定输出“C++”重载函数、构造函数、析构函数,又如在汇编代码里调用“C””或“C ++”函数等。修饰名由函数名、类名、调用约定、返回类型、参数等共同决定。调用约定调用约定(Calling convention)决定以下内容:函数参数的压栈顺序,由调用者还是被调用者把参数弹出栈,以及产生函数修饰名的方法。MFC支持以下调用约定:_cdecl按从右至左的顺序压参数入栈,由调用者(#add 即函数外部的另一个函数)把参数弹出栈。对 阅读全文
posted @ 2011-12-30 11:11 Hibernate4 阅读(535) 评论(0) 推荐(0) 编辑

导航