函数调用

b.c   调用   a.c 的函数该如何调用?

a.h:
#ifndef        __A_H__
#define        __A_H__
extern  int  get_num( int  num_a,  int  num_b);
#endif   

b.c:
#include<stdio.h>
#include"a.h"
void  main()
{
     int  a, b;
     int  ret;
     ret = get_num(a, b);
}
 
a.c:
#include<stdio.h>
#include"a.h"
int  get_num( int  num_a,  int  num_b)
{
     int  c;
     c = num_a + num_b;
     return  c;
}
 
另一种方式可以这样:
 
a.c:
#include <stdio.h>
int  get_num( int  num_a,  int  num_b)
{
     int  c;
     c = num_a + num_b;
     return  c;
}

b.c:
 
#include <stdio.h>
extern  int  get_num( int  num_a,  int  num_b);  
void  main()
{
     int  a, b;
     int  ret;
     ret = get_num(a, b);
}
 
如果修改a.c文件:
 
a.c:
#include <stdio.h>  
int  get_num( int  num_a,  int  num_b,  int  d)
{
     int  c;
     c = num_a + num_b;
     return  c;
}
 
编译没有问题。
 
比较一下,可以发现第二种方式可以省掉一个.h文件,符合懒人的做法;但弊端也比较明显,即a.c中get_num这个函数如果发生返回值和参数等修改时,仍然可以编译成功,但是却有可能已经错误了。
即失去了编译器纠错功能了。

内核模块间调用呢?
 
a.c:
#include<stdio.h>
#include"b.h"
int  get_num( int  num_a,  int  num_b)
{
     int  c;
     c = num_a + num_b;
     return  c;
}
reg_get_num_func(get_num);
 
 
b.c:
#include<stdio.h>
#include"b.h"
int  get_num_default( int  num_a,  int  num_b)
{
     return ;
}
void  (*get_num_func)( int  num_a,  int  num_b) = get_num_default; /*赋初值*/
void  reg_get_num_func( int  (*func)( int  num_a,  int  num_b))
{
     get_num_func = func;
}
EXPORT_SYMBOL(reg_get_num_func);
void  main()
{
     int  a, b;
     int  ret;
     ret = get_num_func(a, b);    /*调用的地方*/
}

b.h:
#ifndef __B_H__
#define __B_H__
extern  void  reg_get_num_func( int  (*func)( int  num_a,  int  num_b));
#endif
 
另一种比较简单,也比较容易理解:
 
a.h:
#ifndef        __A_H__
#define        __A_H__
extern  int  get_num( int  num_a,  int  num_b);
#endif   
 
b.c:
#include<stdio.h>
#include"a.h"
void  main()
{
     int  a, b;
     int  ret;
     ret = get_num(a, b);
}
 
a.c:
#include<stdio.h>
#include"a.h"
int  get_num( int  num_a,  int  num_b)
{
     int  c;
     c = num_a + num_b;
     return  c;
}
EXPORT_SYMBOL(get_num);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值