No detail can be too detailed

思则变 变则通 通则达

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

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

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010442328/article/details/46803277
个人分类: 编程之美 c/c++
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭