c语言中函数已有主体_c++里面结构体含有函数的方法

c语言中函数已有主体_c++里面结构体含有函数的方法c语言提示函数已有主体,C++中的函数名称粉碎机制和它的逆向应用 筋斗云网络…1.名称粉碎机制的由来在C语言的语法中,函数名称是一个函数的唯一标识,如果一个文件内含有两个名称相同的函数,编译器就会报“函数已有主体”的错误;在多个文件链接时,如果发现有两个名称

c语言提示函数已有主体,C++中的函数名称粉碎机制和它的逆向应用 筋斗云网络…   1.名称粉碎机制的由来   在C语言的语法中,函数名称是一个函数的唯一标识,如果一个文件内含有两个名称相同的函数,编译器就会报“函数已有主体”的错误;在多个文件链接时,如果发现有两个名称相同的函数,链接器就会报“符号重定义”的错误。   具有多态特性的C 支持函数的重载,函数不再以函数名称作为唯一标识。只要满足构成重载的条件,两个(或多个)功能不同的函数可以有相同的函数名称。这样一来,函数的调用者会获得多态性带来的极大方便(虽然函数的编写者的工作量没有改变,所有的同名函数仍需要一个一个地去编写)。构成函数重载的条件是:   1.作用域相同   2.函数名称相同   3.参数不同(类型,个数,顺序)   (另外:返回值类型、调用约定类型并不作为参考)   为了支持函数重载这一新特性,编译器的开发者们大多选择使用名称粉碎机制,即把函数的原有名称和参数类型、个数、顺序等信息融合成一个新的函数名称。这个新的名称就是此函数的唯一标识。有了它,之后的工作就可以继续沿用C语言的套路(在编译、连接过程中,若发现新名称存在重复现象,仍会发出“函数已有主体”或“符号重定义”信息)。   值得一提的是,C 标准中只是说明了函数重载的定义,但并没有提出“名称粉碎机制”这种概念。由于名称粉碎机制的直观、高效、易于兼容以前的C版本的特点,所以各编译器作者不约而同地选择用名称粉碎机制来实现函数重载。虽然各编译器的思路是一致的,但是由于没有统一的标准,所以各编译器的名称粉碎结果也自然是五花八门。下面我们来观察微软VC编译器的名称粉碎细节。   2.微软VC编译器的名称粉碎细节   在一般情况下,我们是看不到名称粉碎机制的细节的(因为我们没有必要知道编译器内部的操作)。为了看到这些细节,我们必须进入编译生成的obj文件中探索。例如这次定义两个名为test_add的函数,分别用于计算整形数据相加之和和双精度浮点型数据相加之和:   //文件 test.cpp   #include “stdafx.h”   int test_add(int n1, int n2)   {   return n1   n2;   }   double test_add(double d1, double d2)   {   return d1   d2;   }   在头文件中声明这两个函数:   //文件test.h   #pragma once   int test_add(int n1, int n2);   doubl

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/65012.html

(0)
上一篇 2024年 8月 27日
下一篇 2024年 8月 27日

相关推荐

关注微信