C语言实现函数调用的三种方法

  • 1 第一种方法
  • 2 第二种方法
    • 2.1 main函数
    • 2.2 子函数
  • 3 第三种方法
    • 3.1 主函数
    • 3.2 子函数源文件
    • 3.3 子函数头文件
  • 4 结果
  • 5 返回多个参数(结构体)
    • 5.1 main函数
    • 5.1 子函数源文件
    • 5.3 子函数头文件

1 第一种方法

在一个.c文件里面进行子函数调用
step1:函数声明
step2:mian函数
step3:子函数

/********************************数组元素之和法一:  子函数调用
**********************************/
#include<stdio.h>#define M 10   // 数组元素个数
int num[M]={1,2,3,4,5,6,7,8,9,10};/********************************函数声明
**********************************/
int sum(int * start, int * end);/********************************main函数
**********************************/
int main(void)
{long answer;answer=sum(num,num+M);printf("The total number is %ld.\n",answer);return 0;
}/********************************子函数
**********************************/
int sum(int * i, int * end)
{int total=0;while(i<end){total+=*i;// 把数组元素的值加起来i++;  // 让指针指向下一个元素}return total;
}

2 第二种方法

调用外部的C文件

2.1 main函数

/********************************数组元素之和不需要.h文件,直接调用外部函数的方法
**********************************/#include<stdio.h>
#include "D:\mwq\LAB\z7\ARM\VC\extern_get_c_file_v2\sum.c"//调用外部函数   路径+外部函数名#define M 10   // 数组元素个数
int num[M]={1,2,3,4,5,6,7,8,9,10};/********************************main函数
**********************************/
int main(void)
{long answer;answer=sum(num,num+M);//调用求和函数printf("The total number is %d.\n",answer);return 0;
}

2.2 子函数


#include<stdio.h>/********************************函数功能:求和输入参数:素组的首尾地址输出参数:素组所有元素之和
**********************************/
int sum(int * i, int * end)
{int total=0;while(i<end){total+=*i;// 把数组元素的值加起来i++;  // 让指针指向下一个元素}return total;
}

3 第三种方法

注:这种方法的实现平台为SDK,但思想一样。
一个main.c 。
子函数源文件用sum.c 表示;子函数头文件用 sum.h表示。
有几个子函数就有几个sum.c 和 sum.h

3.1 主函数

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "sleep.h"
#include "sum.h"#define M 10
int answer;int main()
{init_platform();print("Hello World\n\r");print("you are my book\n\r");answer=sum(M);//调用求和函数printf("The total number is %d.\n",answer);cleanup_platform();return 0;}

3.2 子函数源文件

#include<stdio.h>
#include"sum.h"/********************************函数功能:求和输入参数:素组的首尾地址输出参数:素组所有元素之和
**********************************/
int sum(int N)
{int i;int total=0;for(i=0;i<=N;i++){total=total+i;// 把数组元素的值加起来}return total;
}

3.3 子函数头文件

#ifndef SUM_H
#define SUM_Hint sum(int N);// 子函数#endif

4 结果

5 返回多个参数(结构体)

5.1 main函数

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>#include "Multiple_Beam_send_func.h" // 多波束发射的头文件/*
工作模式说明
% mode = 0:相控阵接收模式% mode = 1:空域抗干扰模式(LMS)
% mode = 2:空时抗干扰模式(LMS)% mode = 3:空域抗干扰模式(DMI)
% mode = 4:空时抗干扰模式(DMI)% mode = 5:相控阵发射模式
*///      输入参数
#define mode        5         // 工作模式#define T          1         // 信源数(波束个数)
#define S           4         // 阵元数
#define B           320       // 信号总带宽,单位是MHz
#define fs          250       // 采样率,单位是MHz
#define f_clk       250       // 系统钟,单位是MHz
#define flag        0         // 乘法器是否复用   如果乘法器复用,则flag = 1;如果乘法器不复用,则flag = 0。
#define N           89        // 多相滤波器(低通滤波器)的阶数
#define W           16        // 信号位宽   16bit / 32bit,需为16的倍数。
#define IQ_slect    0         // IQ_slect = 1:全部用复信号处理; IQ_slect = 0:尽量用实信号处理。
#define s_p         1         // 阵元权值串行计算,则s_p = 1;如果阵元权值并行计算,则s_p = 0。
#define H           50        // 希尔伯特滤波器的阶数
#define J           1         // 空时滤波阶数int main()
{double DSP_est=0, DDS_est=0;source_struct ZiYuan;ZiYuan = Multiple_Beam_send_func(S, s_p, flag);DSP_est = ZiYuan.sum_DSP;// 得到第1个返回值DDS_est = ZiYuan.sum_DDS; // 得到第2个返回值printf("DSP_est is %.0f \n\r", DSP_est);printf("DDS_est is %.0f \n\r", DDS_est);system("pause");return 0;}

5.1 子函数源文件

#include<stdio.h>
#include"Multiple_Beam_send_func.h"/********************************
函数功能:多波束发射的资源估计
**********************************/source_struct Multiple_Beam_send_func(int S, int s_p, int flag)
{//变量声明source_struct ZiYuan;double Comp_mul_1 = 0;double Real_mul_1 = 0;double DDS_1 = 0;double Comp_mul_2 = 0;double Real_mul_2 = 0;double DDS_2 = 0;double Comp_mul_3 = 0;double Real_mul_3 = 0;double DDS_3 = 0;double Comp_mul_4 = 0;double Real_mul_4 = 0;double DDS_4 = 0;double sum_Comp_mul = 0;double sum_Real_mul = 0;double sum_DSP_Esti = 0;double sum_DDS_Esti = 0;// step 1:参考阵元信号生成模块Comp_mul_1 = 0;     // 复数乘法器个数Real_mul_1 = 0;     // 实数乘法器个数DDS_1 = 1;          // DDS个数//  step 2:权值计算模块if (s_p == 0) // 阵元权值串行计算,则s_p = 1;如果阵元权值并行计算,则s_p = 0。{Comp_mul_2 = 0;         // 复数乘法器个数Real_mul_2 = 3 * S;     // 实数乘法器个数DDS_2 = 3 * S;          // DDS个数}else{ Comp_mul_2 = 0;       // 复数乘法器个数Real_mul_2 = 3;       // 实数乘法器个数DDS_2 = 3;            // DDS个数}//  step 3:加权求和模块if (flag == 0) // 如果乘法器复用,则flag = 1;如果乘法器不复用,则flag = 0。{ Comp_mul_3 = 0;Real_mul_3 = 2 * S;DDS_3 = 0;}else{Comp_mul_3 = 0;Real_mul_3 = S;DDS_3 = 0;}// step 4:总资源计算sum_Comp_mul = Comp_mul_1 + Comp_mul_2 + Comp_mul_3; // 复数乘法器个数sum_Real_mul = Real_mul_1 + Real_mul_2 + Real_mul_3; // 实数乘法器个数sum_DSP_Esti = sum_Comp_mul * 3 + sum_Real_mul * 1;        // DSP资源消耗sum_DDS_Esti = DDS_1 + DDS_2 + DDS_3;                      // DDS个数// test-- - 具体实例的计算公式(2.5)//R_Mul_DSP_M = 3 + 2 * S;  % 多波束接收的乘法器资源//fprintf('example_DSP=%g\n', R_Mul_DSP_M);//fprintf('\n');ZiYuan.sum_DSP = sum_DSP_Esti;ZiYuan.sum_DDS = sum_DDS_Esti;return ZiYuan;}

5.3 子函数头文件

#pragma once
#ifndef _MUlTIPLE_BEAM_SEND_FUNC_H
#define _MUlTIPLE_BEAM_SEND_FUNC_H// 定义一个结构体,用来返回子函数的多个参数
typedef   struct//结构体
{double   sum_DSP;double   sum_DDS;
}source_struct;// 声明了一个结构体 angle_struct// 函数调用
source_struct Multiple_Beam_send_func(int S, int s_p, int flag);#endif

C语言实现函数调用的三种方法相关推荐

  1. C语言求最大公约数三种方法详解

    C语言求最大公约数三种方法详解 题目要求 常用写法(穷举法) 辗转相减法 辗转相除法 main函数 整体代码 题目要求 运行最大公约数的常用算法,并进行程序的调式与测试. 常用写法(穷举法) 从两个数 ...

  2. c语言程序π,C语言求圆周率π(三种方法)

    题目1) 利用公式①计求π的近似值,要求累加到最后一项小于10^(-6)为止. 题目2) 根据公式②,用前100项之积计算π的值. 题目1)提供了一种解法,题目2)提供了两种解法,请看解析. 题目1) ...

  3. c语言求圆周率 . 4,C语言求圆周率π(三种方法)(4页)-原创力文档

    C语言求圆周率π(三种方法) 题目1) 利用公式①计求π的近似值,要求累加到最后一项小于10^(-6)为止.题目2) 根据公式②,用前100项之积计算π的值.题目1)提供了一种解法,题目2)提供了两种 ...

  4. C语言求幂的三种方法

    用三种方法求幂值 一. 暴力递归 直接对x乘y次 int result(int x,int y) {int num=1;for (int i=1; i<=y; i++) {num*=x;}ret ...

  5. C语言求最小公倍数的三种方法

    第一种方法:累加法求 思路是,两个数字,要求他们的最小公倍数,那么这个最小公倍数,至少不要比这两个要求的数小.我们首先判断出两个数中较大的一个,然后判断这个数是否是要求的两个数的最小公倍数.如果不是, ...

  6. C语言数组初始化的三种方法

    C语言中,数组初始化的方式主要有三种: 1.声明时,使用 {0} 初始化: 2.使用memset: 3.用for循环赋值. 那么,这三种方法的原理以及效率如何呢? 请看下面的测试代码: #define ...

  7. C语言实现strlen的三种方法

    目录 1.strlen介绍 strlen --- 求字符串长度 2.如何使用strlen库函数 3.三种方法实现strlen 计数器法: 递归法: 指针-指针法: 4.关于strlen返回值 1.st ...

  8. 【C语言】求最小公倍数三种方法

    第一种 在两个数中确定一个较大值赋值给整形变量m,变量m分别对a.b求余数,如果都被整除则m为a.b的最小公倍数,否则将m+1后赋给m,一直循环下去. #include<stdio.h> ...

  9. C语言 打印星星(三种方法)

    #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> 运行下面之前记得加头文件哦~ 方法一: int main() {printf(&qu ...

  10. C语言 数值交换的三种方法

    一.编程思想 通过建立第三个变量来交换数值: 不建立变量,通过加减的方式交换(PS:如果俩个数值过大,则可能会溢出) 不建立变量,通过异或操作符交换(最高效简洁,不会溢出,是1.2的升级) 异或交换 ...

最新文章

  1. 【初识Java】 -- Java的数据类型与运算符
  2. c# 对Url 解码编码
  3. Python学习笔记007_图形用户界面[EasyGui][Tkinter]
  4. 转载:理解机器学习中的偏差与方差
  5. laravel Excel导入导出
  6. IOS学习笔记二十三对象归档(NSKeyedArchiver、NSKeyedUnArchiver、NSCodeing)
  7. linux安装rz命令_Linux 安装dep安装包命令
  8. 禅道设置bug模板_禅道的自定义功能:表格切换和创建页面的自定义
  9. 【python】循环结构if、for 、while
  10. 学了这么多年的人工智能居然还不了解它?
  11. 12个免费的 Twitter Bootstrap 后台模板
  12. 51Nod-1134 最长递增子序列【LIS】
  13. linux学习: sudo命令(ubuntu)
  14. linux 显存占用内存,Linux服务器内存、CPU、显卡、硬盘使用情况查看
  15. 不知道这些,你的世界杯就白看了!
  16. 【51单片机】矩阵键盘
  17. my ReadBook_liutongjingjixue / circulation economics
  18. 米家扫地机器人充满电需要多长时间_【米家扫地机器人使用总结】充电|APP|清扫_摘要频道_什么值得买...
  19. 联想如何打开计算机配置,联想电脑如何进入BIOS以及设置启动菜单
  20. SpringBoot整合SpringDataElasticSearch 完成地理搜索 附近人搜索 距离搜索

热门文章

  1. FFmpeg编码详细流程
  2. 数据接口复习 3 stack and queue
  3. U-boot第二阶段概述(转)
  4. Linux系统无法载入nvidia-smi驱动
  5. ubuntu 安装docker_Docker学习笔记1 虚拟化历史及 Ubuntu环境下体验安装
  6. python 链表操作 优化_Python:如何修改列表时内存的使用和优化?
  7. C++实现binary文件读取(可对‘bil‘,‘bsq‘ float32,double,unchar,unit16,unit8等格式进行读取)
  8. C++对ascii文件按行和分隔符读取并显示
  9. Possible missing firmware
  10. char*,const char*和string 三者转换