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压栈,将栈中的东西抠出来。

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

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

c函数重载的实现

函数重载是C++中特有的,在C语言中没有。 函数重载的定义:指在同一作用域内,可以有一组相同函数名,不同参数列表的函数,这组函数称为重载函数。      int Add(int a, int b)  ...

如何实现 C 的函数重载

大家都知道 C++ 等面向对象的语言支持函数重载,C++ 实现函数重载很大程度上依赖与编译器对函数名的 Mangling(损坏,破坏),即 C++ 的源代码被编译后同名的重载函数名字会被破坏,一般是在...

c sharp 中的函数重载

  • 2008年03月11日 17:23
  • 21KB
  • 下载

C++函数重载实现的原理以及为什么在C++中调用C语言编译的函数时要加上extern "C"声明

C++相对于C语言而言支持函数重载是其极大的一个特点,相信在使用C语言的时候大家如果要写一个实现两个整型数据相加的函数还要写一个浮点型数据相加的函数,那么这两个函数的名字绝对不可以一样,这样无疑在我们...

模拟实现C库函数:strncpy、strncat和strncmp

strncat函数是字符串链接函数,将* src字符串中n个字符连接到* dest字符串的有效字符的后面,最后还要加上’\0’ #define _CRT_SECURE_NO_WARNINGS 0 ...

模拟退火算法求函数最小值问题的C/C++实现

1、模拟退火算法简介 模拟退火算法(Simulated Annealing,SA)最早的思想是由N. Metropolis等人于1953年提出。1983 年,S. Kirkpatrick 等成功...

模拟实现C库函数strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove

1、模拟实现strcpy char *my_strcpy( char *dest, const char *str) { assert(dest != NULL); assert(str != N...

模拟实现C库函数:strcpy和strcat

strcpy的作用是将一个字符串的内容复制到另外一个字符数组中,包括字符串的终结符'\0' #define _CRT_SECURE_NO_WARNINGS 0 #include #include ...

JS模拟面向对象全解(三、函数重载)

马上就要进入JS面向对象的阶段了,在这之前,我们在了解一下JS这个“新换旧”的语言如何模拟实现函数重载。——先了解一下JS的“新换旧”特性:function show(x){ alert(x);...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C函数的模拟重载实现说明
举报原因:
原因补充:

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