C函数的模拟重载实现说明

原创 2015年07月08日 14:43:26

在研究printf是,这是一个变参函数,是否可以用这个特性写一个重载函数,当然只是实现模拟。
谷歌说c++实现函数重载是这样的,C++ 实现函数重载很大程度上依赖与编译器对函数名的 Mangling(损坏,破坏),即 C++ 的源代码被编译后同名的重载函数名字会被破坏,一般是在原函数名前后加上特定的字符串,以区分不同重载函数,然后在调用的时候根据参数的不同选择合适的函数。

从网上搞到一段代码

#include <stdarg.h>
#include <stdio.h>

void var_args_func(const char * fmt, ...) 
{
    char    *ap;

    ap = ((char*)&fmt) + sizeof(fmt);
    printf("%d\n", *(int*)ap);  

    ap =  ap + sizeof(int);
    printf("%d\n", *(int*)ap);

    ap =  ap + sizeof(int);
    printf("%s\n", *((char**)ap));
}

int main()
{
    var_args_func("%d %d %s\n", 4, 5, "hello world");
    return 0;
}

这里写图片描述
完全是根据c压栈,将栈中的东西抠出来。

虽然好像还是没能达到重载的目的。。。。。。。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

JavaScript模拟函数重载

在Java等语言里面实现函数的重载是比较简单的,参数数量不同就能实现同名函数的重载,而JavaScript中的参数本质上还是arguments这个类数组的引用,不能直接更具参数数量的不同而达到重载,这...
  • liuyaqi1993
  • liuyaqi1993
  • 2017年04月24日 22:49
  • 366

C语言实现函数重载

参考 Overloading Functions in C 函数重载大家都知道 C++ 等支持面向对象的语言支持函数重载,那么编译器是如何辨别这些函数的呢?C++如何实现重载C++ 实现函数重载很大...
  • gatieme
  • gatieme
  • 2016年03月18日 11:30
  • 6408

js模拟实现重载

var obj = {}; function addMethod(object, name, fn) { var old = object[name]; object[name] = ...
  • github_37037281
  • github_37037281
  • 2017年06月30日 15:31
  • 237

js面向对象编程:如何实现方法重载

js中如何实现方法重载?这涉及到三个问题 1同名函数的调用问题 2函数中特殊的参数arguments 3如何利用arguments实现方法重载...
  • xuexiaodong2009
  • xuexiaodong2009
  • 2014年07月01日 13:43
  • 1769

c语言如何实现函数重载

c语言如何实现函数重载
  • susidian
  • susidian
  • 2017年04月09日 22:58
  • 1252

【笔试题】C语言:模拟实现strcat

strcat()函数不限制,而strncat()是有限制的,后者我的博客也有,有兴趣可以查看。     设置有限制的strncat(),因为:像我的博客,C语言:判断一个字符串是否为另外一个字符串旋转...
  • hanjing_1995
  • hanjing_1995
  • 2016年05月30日 17:15
  • 449

模拟实现c语言中的动态内存分配malloc函数

动态存储器分配器维护着一个进程的虚拟的存储器区域,称为堆(heap)。分配器将堆视为一组不同大小的块的集合来维护。每个块就是一个连续的虚拟存储器片(chunk),要么是已经分配的,要么是空闲的。 我...
  • shandongdaya
  • shandongdaya
  • 2012年02月28日 21:28
  • 3360

模拟实现printf函数

在学习C语言的时候,使用最多的就是printf函数了,常常用,却没有认真的思考过printf函数是如何实现的。 查了查msdc后,有了点心得,连忙记录下来。 呈上msdn上printf函数的主要相关信...
  • qq_35524916
  • qq_35524916
  • 2016年11月10日 09:34
  • 729

【c语言】模拟实现库函数strcpy函数

// 模拟实现库函数strcpy函数 #include #include char* my_strcpy(char const *p, char *q) { char *ret = q; ...
  • zhaoyaqian552
  • zhaoyaqian552
  • 2015年07月02日 10:09
  • 1011

【C语言】模拟实现strncpy、strncat、strncmp函数

【C语言】模拟实现strncpy、strncat、strncmp函数
  • Monster_Girl
  • Monster_Girl
  • 2016年08月01日 16:05
  • 953
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C函数的模拟重载实现说明
举报原因:
原因补充:

(最多只允许输入30个字)