Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用func数组的函数结构_C - Fatal编程技术网

使用func数组的函数结构

使用func数组的函数结构,c,C,请 我正试图使这个库成为一个基于struct的库 我想达到类似“mats.basic.add(1,1);” 当build是struct中的第一行(两个)时出现第一个错误,然后 是,尽管编辑器在点操作(如add或sub)后提示我 下一个错误是“uknown成员添加,子 #include <stdio.h> #include <stdlib.h> #include <stdint.h> typedef uint8_t (*p_fn1)(uint8_t,uint8

我正试图使这个库成为一个基于struct的库 我想达到类似“mats.basic.add(1,1);”

当build是struct中的第一行(两个)时出现第一个错误,然后 是,尽管编辑器在点操作(如add或sub)后提示我 下一个错误是“uknown成员添加,子

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

typedef uint8_t (*p_fn1)(uint8_t,uint8_t);

uint8_t fn_add(uint8_t num1,uint8_t num2){
    return num1+num2;
}

uint8_t fn_sub(uint8_t num1,uint8_t num2){
    return num1-num2;
}

typedef struct mats {
    p_fn1 add=fn_add;
    p_fn1 sub=fn_sub;
}mats;

void init_mats(mats* t_mats){
    t_mats->add=fn_add;
    t_mats->sub=fn_sub;
}
int main()
{
    mats mats_s;
    init_mats(&mats_s);
    uint8_t c=mats_s.add(1,1);
    printf("%d",c);
    return 0;
}
#包括
#包括
#包括
类型定义uint8_t(*p_fn1)(uint8_t,uint8_t);
单位数量1,单位数量2{
返回num1+num2;
}
单元8\u t fn\u sub(单元8\u t num1,单元8\u t num2){
返回num1-num2;
}
typedef结构垫{
p_fn1 add=fn_add;
p_fn1 sub=fn_sub;
}垫子;
无效初始垫(垫*t垫){
t_mats->add=fn_add;
t_mats->sub=fn_sub;
}
int main()
{
垫子垫子;
初始垫(和垫);
uint8_t c=垫加(1,1);
printf(“%d”,c);
返回0;
}

非常感谢您在定义结构时试图初始化结构成员。这是无效语法

从定义中删除这些初始值设定项

typedef struct mats {
    p_fn1 add;
    p_fn1 sub;
}mats;

定义结构时,您试图初始化结构成员。这是无效语法

从定义中删除这些初始值设定项

typedef struct mats {
    p_fn1 add;
    p_fn1 sub;
}mats;

如果你想拥有可以在你的类型上调用的方法,请用C++编写程序。它有这个特性;C没有。


在纯C中,没有任何一种方法可以做到这一点,即编写笨拙、运行缓慢和/或使用不适当的内存量。您尝试的具体方法根本不起作用,因为您试图在类型上设置字段,而不是在该类型的实例上,但即使您修复了这一点,您仍然会遇到其他一些基本问题语言的模仿。

如果你想有方法可以调用你的类型,那么用C++编写程序。它有这个特性;C没有。


在纯C中,没有任何一种方法可以做到这一点,即编写笨拙、运行缓慢和/或使用不适当的内存量。您尝试的具体方法根本不起作用,因为您试图在类型上设置字段,而不是在该类型的实例上,但即使您修复了这一点,您仍然会遇到其他一些基本问题模仿该语言。

p_fn1 add=fn_add;p_fn1 sub=fn_sub;
无效。无法在结构定义中分配它。请尝试
typedef struct mats{p_fn1 add;p_fn1 sub;}mats;
。另外,
fn_sum
键入为
fn_sub
谢谢你说的对,所以我不能在结构中分配func的地址,它现在可以工作:)将
&d
更改为
%d
将改善结果,一旦你修复结构定义
p_fn1 add=fn_add;p_fn1 sub=fn_sub;
无效。它不能在str>中分配结构定义。尝试
typedef结构mats{p_fn1 add;p_fn1 sub;}mats;
。同样
fn_sum
键入为
fn_sub
谢谢你的话,所以我不能在结构中分配func的地址,现在可以了:)将
&d
更改为
%d
将改善结果,一旦你修改了结构定义,那么请…按照我显示的方式做太糟糕了?我想做的就是有一个用于显示的驱动程序这将提示您喜欢LCD驱动程序。写入数据。字母数字。句子(“HELLO WORLD”);所以您可以看到,我至少需要三个结构和指针…这对MCU有那么坏吗?(我打算在8位、32位中使用它…)“VLADIM”席UrStk对微控制器来说尤其糟糕。通过函数指针调用是一个相对昂贵的操作,编译器通常不能优化它。再次:如果你想要这种语法,使用C++。因此,C++语法是为了这些目的,它确保优化,MCU会工作得很好吗?谢谢FO!r建议!所以请…用我上面显示的方式做这件事太糟糕了?我想做的就是有一个显示驱动程序,它会提示你喜欢LCD驱动程序。写数据。字母数字。句子(“HELLO WORLD”);所以你可以看到,我至少需要三个结构和指针…这对MCU来说太糟糕了吗?(我打算用8位,32位…)“VLADIM”席UrStk对微控制器来说尤其糟糕。通过函数指针调用是一个相对昂贵的操作,编译器通常不能优化它。再次:如果你想要这种语法,使用C++。因此,C++语法是为了这些目的,它确保优化,MCU会工作得很好吗?谢谢FO!我的忠告!