关闭

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

262人阅读 评论(0) 收藏 举报
分类:

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

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:57234次
    • 积分:2032
    • 等级:
    • 排名:第18939名
    • 原创:136篇
    • 转载:8篇
    • 译文:0篇
    • 评论:7条
    最新评论