07-函数的声明和定义

一、函数声明 1、函数声明的作用 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。 2...

一、函数声明

1、函数声明的作用

告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。

2、函数声明的使用方式

函数的声明一般出现在函数的使用之前。若想不先声明就直接使用,就将函数的定义放置在函数的使用之前。

【注】要满足先声明后使用,或者将定义置于使用之前(定义是一种强有力的声明)!!!

3、函数声明的放置位置

函数的声明一般要放在头文件中的。

【示例】写一个计算器:A ==> 加法、B ==> 减法 ,并做使用。

(1)A ==> 加法(Add.c)

加法函数的定义。

#define _CRT_SECURE_NO_WARNINGS 1

int Add(int x, int y)

{

return (x + y);

}

(2)A ==> 加法(Add.h)

加法函数的声明。

#pragma once

int Add(int x, int y);

(3)B ==> 减法(Sub.c)

减法函数的定义。

#define _CRT_SECURE_NO_WARNINGS 1

int Sub(int x, int y)

{

return (x - y);

}

(4)B ==> 减法(Sub.h)

减法函数的声明。

#pragma once

int Sub(int x, int y);

(5)加法和减法的使用(test.c)

使用加法函数和减法函数。

【注】使用函数前首先就需要包含他们的头文件("Add.h" 和 "Sub.h"),包含头文件就相当于将头文件的内容拷贝过来了!!!

#define _CRT_SECURE_NO_WARNINGS 1

#include

#include "Add.h"

#include "Sub.h"

int main()

{

int a = 10;

int b = 20;

int c = Add(a, b);

printf("%d\n", c);

int d = Sub(a, b);

printf("%d\n", d);

return 0;

}

二、函数定义

函数的定义是指函数的具体实现,交待函数的功能实现。

三、示例

1、错误示例 (未声明函数)

#define _CRT_SECURE_NO_WARNINGS 1

#include

int main()

{

int a = 10;

int b = 20;

int c = Add(a, b);

printf("%d\n", c);

return 0;

}

int Add(int x, int y)

{

return (x + y);

}

2、正确示例(声明函数)

(1)方式一

#define _CRT_SECURE_NO_WARNINGS 1

#include

/* Add 函数的声明 */

int Add(int x, int y);

int main()

{

int a = 10;

int b = 20;

int c = Add(a, b);

printf("%d\n", c);

return 0;

}

/* Add 函数的定义 */

int Add(int x, int y)

{

return (x + y);

}

(2)方式二

#define _CRT_SECURE_NO_WARNINGS 1

#include

/* Add 函数的声明 */

int Add(int, int);

int main()

{

int a = 10;

int b = 20;

int c = Add(a, b);

printf("%d\n", c);

return 0;

}

/* Add 函数的定义 */

int Add(int x, int y)

{

return (x + y);

}

四、实际的函数声明用例

【假设】程序员想实现一个计算器,却不会写加减乘除的运算。因此买了一个厂商已经写好的计算器。【比如】是一个减法的计算器代码,但是厂商不愿意将减法计算器的源码卖给程序员。

【注意】此时厂商只给了程序员的使用权并没有交出源码!!!

1、厂商的源码

2、厂商生成售卖代码

(1)属性

右击项目 ==>> 选择属性。

(2)选择静态库&编译

配置属性 ==> 常规 ==> 配置类型 ==> 选择:静态库(.lib),点击应用,再选择确定。最后使用快捷键: Ctrl + F7 进行编译一下。

(3)生成静态库

使用快捷键: Ctrl + F5 进行编译一下。出现弹窗,后找点击确定。再去找到项目所在文件夹(Projects => cProject => x64 => Debug)找到【cProject.lib】文件。

【注】cProject.lib 文件就是将 Sub.c 和 Sub.h 两个文件编译后所产生的静态库,且此文件打开都是乱码(什么也看不懂)!!!

(4)售卖文件

厂商售卖【cProject.lib】文件,但是这个【cProject.lib】都看不懂,为了能够让买方程序员使用,同时还售卖了【Sub.h】头文件(头文件要告知用法)。

3、程序员使用买到代码

(1)文件放置

将买来的【cProject.lib】和【Sub.h】这两个文本文件放置在程序员所要实现功能的主函数所在的文件夹里。

【注】一定要放在主函数所在的文件夹,否则实现不了功能还还会报错!!!

(2)头文件导入

将【Sub.h】头文件导入项目中:右击头文件 ==> 左击添加(D)==> 选择现有项,选择【Sub.h】头文件。

(3)包含头文件 & 导入静态库

① 包含头文件:#include "Sub.h"

② 导入静态库:#pragma comment(lib, "cProject.lib")

(4)运行程序。

#define _CRT_SECURE_NO_WARNINGS 1

#include

/* 包含头文件 */

#include "Sub.h"

/* 导入静态库 */

#pragma comment(lib, "cProject.lib")

int main()

{

int a = 10;

int b = 20;

int c = Sub(a, b);

printf("%d\n", c);

return 0;

}