c++如何在主函数文件中调用其他函数文件
作者:Dust_Evc
c++在主函数文件中调用其他函数文件
方法介绍
可以把多个需要调用的子函数声明在一个头文件中。
具体是:
1. 函数的定义写在源文件(A.cpp)里
2. 把函数的声明写在头文件(B.h)里(不必与源文件同名)
3. 在源文件(A.cpp)以及要使用这些函数的源文件中加入 #include "B.h"
例如:
如果子函数引用了string,可以直接在头文件中加上:
#include <string> using namespace std;
这样就不必在主文件中引用这些头文件。
如果在头文件中声明和定义函数,有两种方法:
1、直接在头文件中声明和定义这些子函数,然后在其它文件中引用头文件,编译时,需要加上相应头文件;
2、在头文件中声明这些子函数,然后在子函数的cpp文件中,写这些子函数的定义,同时引用该头文件,使用子函数,只需在相应的cpp文件中引用相应头文件即可,编译时需要加上相应头文件和cpp文件;
注意事项:
1、如果使用头文件中声明的子函数,需要在相应的引用该头文件的cpp文件开头(引用头文件之后),加上引用外部子函数的声明:
extern int func1(int var1, string str1); extern int func2(int var2, string str2); ......
2、为了防止头文件重复调用出错,需要在头文件开头和结束的地方加上防止重复调用的条件编译开关:
#ifndef XXX_H #define XXX_H ...... #endif
示例1
文件fu.cpp
#include "Funs.h"
/*求两个数的最大值函数*/
int max(int a, int b)
{
return a > b ? a : b;
}文件Funs.h
#pragma once #ifndef FUNS_H #define FUNS_H /*求两个数的最大值函数*/ int max(int, int); #endif
文件main.cpp
#include <stdio.h>
#include "Funs.h"
int main()
{
int a = 12, b = 9;
int c = max(a, 9);
printf("%d和%d中的最大值为:%d\n", a, b, c);
return 0;
}示例2
写个头文件(a.h),对调用文件(fun.cpp)里的函数进行申明。
再将头文件引在主函数所在的文件(main.cpp)里。
如下面所示:
文件fun.cpp
#include "Funs.h"
int display(int a,int b)
{
cout<<a+b<<endl;
return 0;
}文件a.h
#pragma once #ifndef A_H #define A_H #include <iostream> int display(int ,int ); #endif
文件main.cpp
#include "a.h"
int main()
{
int a=2,b=3;
display(a,b);
return 0;
}简单写几行,使用非本源文件的函数就需要文件包含方式来包含其他文件,注意好头文件别重复
示例3
链接:https://www.jb51.net/article/276187.htm
理解函数调用的过程
程序在内存中的占用
要学习C语言中函数调用的过程,必须要知道程序在内存中各个区域的分布。

C语言的函数调用的过程主要分布在栈中,所以我们今天主要研究栈。
几个基本的汇编指令
call:
- 将当前指令的下一条指令的地址保存到栈中。
- 跳转至目标函数的地址。
ret :
- 弹出栈顶地址将数据放入eip
- 从栈顶入栈称为push
- 从栈底出栈称为pop
常用寄存器
在CPU中:读取指令(内存-->CPU)-->分析指令(CPU)-->执行指令(CPU)
1. EAX:累积暂存器,EBX:基底暂存器,ECX:计数暂存器,EDX:资料暂存器
2. EIP(pc):程序计数器(用来存放当前正在执行指令的下一条指令的地址)
3. ESP:栈顶
4. EBP:栈底
函数的调用与栈帧的创建销毁
实例函数:

转换成汇编语言:

首先由_tmainCRTStartup调用main函数,并在栈中创建了一个栈帧。
分别把a和b的值压入栈中:


创建b,a临时变量压栈。


call指令保存当前指令下一条计数器的值,并跳转到指定地址。


创建新的栈帧myadd


定义z,并计算a+b,并返回z的值到main中



将a+b的值赋给c。

到这里函数的调用就结束了。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
