个人记录:函数指针、交叉编译

1.函数指针,一般有两种初始化方式,

第一种是用结构体中的函数指针变量赋值的方式,

第二种是使用专门的函数去注册。

#include<stdio.h>
#include<string.h>


//定义一个函数指针类型(一种新的自定义类型,类似于结构体指针)
typedef  int (*getSum)(int a, int b);


//函数指针要指向的函数实体
int function_entity(int a, int b){
    return a+b;
}


struct  info{
    int a;
    getSum  func;//定义了一个一个函数指针类型的变量,但是没有初始化   
};


//注册函数专用 函数, 用于把函数实体和函数指针绑定
void   funcRegister(struct info *ln,  getSum function_entity){
    ln->func = function_entity;
}


int main(){
    struct info  ln;
    int   sum  = 0 ;
    memset(&ln, 0x00, sizeof(ln));    

    //方式一:直接赋值
    ln.a = 100;

    //把函数指针指向函数实体,其实性质跟ln.a = 100是一样的
    //这里仅仅对结构体进行赋值,但并没有实际调用函数。
    ln.func = function_entity;
    
    //调用函数指针指向的函数实体
    sum = ln.func(100, 200);
    printf("sum = [%d]\n", sum);
    //方式一end


    //方式二:使用函数去注册(驱动或者协议中常用)
    funcRegister(&ln, function_entity); //此时也仅仅是赋值,并没有调用function这个函数!!!
    
    //在这里使用结构体的函数成员变量调用函数实体(实际开发中,常常把此结构体定义成全局变量)
    //这样就可以满世界的调用这个函数了,但是也请注意作用域的问题!
    sum += ln.func(100, 200);
    printf("sum=[%d]\n", sum);
    return 0;

}

2.交叉编译中的链接 -lpthread找不到问题

        如果Makefile中有专门的链接动作,如果指定了LDFLAGS  = -s  -lpthread

        ld    xxx.o    xxy.o    xxz.o   -o   $(LDFLAGS) 

        会提示 cannot find lpthread

        但是在测试程序中  aarc-xxx-gcc  *.c  -lpthread 可以编译通过,烧录开发板也可以执行

        一种变相的解决方式是:把ld指定成交叉编译的 g++让编译器帮我们去找这个库。

        如果哪位大佬有更好的解决方案,请踢我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值