文档章节

函数调用

zzb5233
 zzb5233
发布于 2014/09/22 17:06
字数 388
阅读 6
收藏 0
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);


© 著作权归作者所有

上一篇: 偶感
下一篇: 偶感
zzb5233
粉丝 0
博文 2
码字总数 450
作品 0
海淀
程序员
私信 提问
尾调用优化

尾调用(Tail Call)是函数式编程的一个重要概念,本文介绍它的含义和用法。 一、什么是尾调用? 尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。 上面...

阮一峰
2015/04/10
0
0
C++中构造函数与析构函数的调用顺序

构造函数、析构函数与拷贝构造函数介绍 2.1构造函数 构造函数不能有返回值 缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空 创建一...

SibylY
2013/09/25
0
0
每天学习一点儿算法--递归

递归是很多算法都使用的一种编程方法。听说递归是一种十分优雅的问题解决办法,可是对于初涉递归的我,还没有形成这种独特的体会。 学习使用递归的关键在于:如何将问题分为基线条件和递归条...

爱吃西瓜的番茄酱
2018/01/09
0
0
javaScript系列 [06]-javaScript和this

在javaScript系列 [01]-javaScript函数基础这篇文章中我已经简单介绍了JavaScript语言在函数使用中this的指向问题,虽然篇幅不长,但其实最重要的部分已经讲清楚了,这篇文章我们来单独谈一谈...

文顶顶
2018/06/11
0
0
系统调用和库函数及API的区别

在写程序的过程中,像MFC,VC++这些编程,都会涉及到函数的调用,有库函数也有系统函数,下面看一看它们的区别!! 系统调用(system call)和库函数调用(Library function call)的区别? 理...

qq_36615589
2018/05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

蚂蚁区块链BaaS:开放在云端,落地于实体

自 2018 年 6 月上线以来,蚂蚁区块链 BaaS 不断在技术上实现突破,形成自身独特的优势,并做为行业领军者在不同领域的几十个场景实现落地。在区块链的商用时代加速到来之际,通过开放自身的...

阿里云官方博客
28分钟前
3
0
Idea cannot access【好使】

Idea中无法访问类中public方法。。 解决: idea点击左下角电脑图标,打开右边栏各种功能键 右边栏Maven Projects中点一下刷新,就是那个两个蓝的箭头组成的环 ----------------------------...

Airship
29分钟前
3
0
Spark内置图像数据源初探

作者:林武康,花名知瑕, 阿里巴巴计算平台事业部EMR团队的高级开发工程师,Apache HUE Contributor, 参与了多个开源项目的研发工作,对于分布式系统设计应用有较丰富的经验,目前主要专注于...

阿里云云栖社区
30分钟前
1
0
【面试被虐】游戏中的敏感词过滤是如何实现的?

小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了以下事情的发生….. 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过...

爱编程的浪子
32分钟前
4
0
springboot之maven属性引入

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.7</version><configuration><delimiters><delimite......

Online_Reus
33分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部