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);