为了账号安全,请及时绑定邮箱和手机立即绑定

如何在C语言中实现功能重载?

如何在C语言中实现功能重载?

C
慕森卡 2019-06-25 16:43:03
如何在C语言中实现功能重载?在C中是否有实现函数重载的方法?我正在查看要重载的简单函数,如foo (int a)  foo (char b)  foo (float c , int d)我认为没有直截了当的办法,我正在寻找解决办法,如果存在的话。
查看完整描述

3 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

很少有可能:

  1. printf样式函数(作为参数类型)
  2. OpenGL样式函数(输入函数名)
  3. c+的C子集(如果可以使用c+编译器)


查看完整回答
反对 回复 2019-06-25
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

如前所述,重载是C不支持的意思。解决这个问题的一个常见成语是让函数接受标记结合..这是由struct参数,其中struct本身由某种类型的指示符组成,例如enum,以及union不同类型的值。例子:

#include <stdio.h>typedef enum {
    T_INT,
    T_FLOAT,
    T_CHAR,} my_type;typedef struct {
    my_type type;
    union {
        int a; 
        float b; 
        char c;
    } my_union;} my_struct;void set_overload (my_struct *whatever) {
    switch (whatever->type) 
    {
        case T_INT:
            whatever->my_union.a = 1;
            break;
        case T_FLOAT:
            whatever->my_union.b = 2.0;
            break;
        case T_CHAR:
            whatever->my_union.c = '3';
    }}void printf_overload (my_struct *whatever) {
    switch (whatever->type) 
    {
        case T_INT:
            printf("%d\n", whatever->my_union.a);
            break;
        case T_FLOAT:
            printf("%f\n", whatever->my_union.b);
            break;
        case T_CHAR:
            printf("%c\n", whatever->my_union.c);
            break;
    }}int main (int argc, char* argv[]){
    my_struct s;

    s.type=T_INT;
    set_overload(&s);
    printf_overload(&s);

    s.type=T_FLOAT;
    set_overload(&s);
    printf_overload(&s);

    s.type=T_CHAR;
    set_overload(&s);
    printf_overload(&s); }


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 950 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信