本文介绍的是C语言中函数的声明与函数的调用,在VS2019环境下编程测试代码。
一、函数的调用与函数的声明
1.1单个文件下的函数的声明与函数的调用
函数的调用需要在函数的声明之后。否则会报出警告。
编译器编写代码的时候,会对代码进行扫描,从第一行往后面扫描。
例如:
这段代码是函数的调用在函数的声明之前的:
#include <stdio.h>int main()
{int year = 0;scanf("%d", &year);int ret = is_leap_year(year);if (ret == 1){printf("%d是闰年", year);}else{printf("%d不是闰年", year);}return 0;
}int is_leap_year(int fun1_year)
{if ((fun1_year % 4 == 0 && fun1_year % 100 != 0) || fun1_year % 400 == 0){return 1;}else{return 0;}
}
运行结果:
从运行结果中,我们可以看到编译器出现了警告。
加上函数的声明之后:
#include <stdio.h>//函数的声明
int is_leap_year(int fun1_year);int main()
{int year = 0;scanf("%d", &year);int ret = is_leap_year(year);if (ret == 1){printf("%d是闰年", year);}else{printf("%d不是闰年", year);}return 0;
}int is_leap_year(int fun1_year)
{if ((fun1_year % 4 == 0 && fun1_year % 100 != 0) || fun1_year % 400 == 0){return 1;}else{return 0;}
}
运行结果:
在之前的博客中,我们讲解函数的时候,将函数的定义放在主函数之前,并没有发出函数未定义的警告,这是为什么呢?
这是因为函数的定义是一种特殊的函数的声明。
例如:
#include <stdio.h>//函数的定义
int is_leap_year(int fun1_year)
{if ((fun1_year % 4 == 0 && fun1_year % 100 != 0) || fun1_year % 400 == 0){return 1;}else{return 0;}
}int main()
{int year = 0;scanf("%d", &year);int ret = is_leap_year(year);if (ret == 1){printf("%d是闰年", year);}else{printf("%d不是闰年", year);}return 0;
}
运行结果:
提示框中并没有出现函数的未定义。
那为什么不像这样去声明函数呢?这是因为在某些开发中,函数的定义需要放在主函数的下面,关于这个后面的博客会对此有所介绍。
1.2多个文件下的函数的声明与函数的调用
在企业软件开发中,通常是多个程序员完成某个开发任务。每一个程序员负责一个模块。最后再拼接起来。对于这种情况,我们如何对函数声明和调用呢?
例如:
某公司开发一款计算器,计算机有四个功能:加法、减法、乘法和除法。
现在,程序员小A负责加法的程序设计,那它应该怎么做呢?
第一步,创建一个源文件(源文件通常用于函数的定义,实现函数的功能),在源文件中实现加法函数的功能。
(1)创建源文件
(2)命名源文件
(3)实现函数的功能
第二步,创建一个头文件(头文件通常用于函数的声明、类型的声明),在头文件中写下函数的声明。
(1)创建头文件
(2)命名头文件
(3)函数的声明
这些工作都完成之后,如何在主函数中使用这个函数呢?
(1)使用""包含头文件。(<>与""的区别此处不做详细介绍,""通常用于包含自己所写的头文件)
(2)函数的调用
参考源码:
Add.h
#pragma once//函数的声明
int Add(int x,int y);
Add.c
#define _CRT_SECURE_NO_WARNINGS 1//函数的定义
int Add(int x, int y)
{return x + y;
}
test.c
#include <stdio.h>
#include "Add.h"int main()
{int a = 10;int b = 20;int ret = Add(a,b);printf("a+b=%d\n",ret);return 0;
}