C语言成长之路40:函数精讲(上)

声明:本笔记基于 B站UP主「来自程序员的暴击」的 「C语言成长之路」中对应课程;


C语言中,代码的执行顺序一般都是以从上到下的方式进行执行,所以一般建议main函数放在代码的最底部;

但是有一个方法,可以声明函数,先告知编译器你有这么一个函数的存在,后面再补上函数的具体实例;

一般例子(main函数在最后):

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <limits.h>
 4 #include <Windows.h>
 5 
 6 //#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
 7 
 8 void add(int a, int b){
 9     int c = a + b;
10     printf("a + b = %d\n",c);
11 }
12 
13 int main(){
14     /*  C语言成长之路40:函数精讲(上)
15      *
16      */
17     add(1,2);
18     return 0;
19 }

先声明函数,再补全函数定义:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <limits.h>
 4 #include <Windows.h>
 5 
 6 //#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
 7 
 8 void add(); //  先声明有一个void类型的函数,这里指向18行的void函数
 9 
10 int main(){
11     /*  C语言成长之路40:函数精讲(上)
12      *
13      */
14     add(1,2);
15     return 0;
16 }
17 
18 void add(int a, int b){ //  再在后面补全函数的具体执行代码
19     int c = a + b;
20     printf("a + b = %d\n",c);
21 }

跨文件调用函数:

编写一个头文件akne.h,在akne中写一个akne的函数打印Hello

回到main.c中,引入akne.h后,就能正常的使用akne.h里面的函数了;

#include <stdio.h>
#include "akne.h"   //  引入akne.h头文件

void add(int a, int b){
    int c = a + b;
    printf("a + b = %d\n",c);
}

int main(){
    /*  C语言成长之路40:函数精讲(上)
     *
     */
    add(1,2);
    akne(); //  因为前面正常的引入了akne这个头文件,所以就可以正常的使用这个函数了s
    return 0;
}

函数的定义

  函数就是对某一特定功能的抽象

函数的作用

  模块化,便于定位错误

函数定义的语法格式

  函数定义有4个要素:参数列表,返回类型,函数名和函数体,参数列表和返回类型;

  函数名用于和程序中其他程序实体区分,而函数体可以是一段可执行的代码块,实现特定的算法或功能。

调用函数的两种方式:

1、“先定义,后调用”

  这要求函数定义和调用语句在同一个文件内,编译器才能从函数定义中提取函数的参数列表、输出类型等接口信息。

  举例:函数声明和调用再一个文件内;

2、“函数生命+函数调用”

  大多数情况下,函数的定义与函数的调用并不在一个文件内,即使在一个文件中也有可能调用在前而定义在后,这个时候需要在调用之前先对函数声明,告诉编译器有这个一个函数的存在;

  举例:函数的跨文件调用;

注意事项:

  1、函数的定义在程序中都是平行的,即不允许在一个函数的内部调用另外一个函数;

  2、函数名是用户自定义标识符,当函数值为整型时类型名可以省略;当函数不需要向调用方返回值时候,使用void类型名;

  3、形参列表中的形参是用户自定义标识符,没有参数时,圆括号不能省略,此时函数为无参函数;

  4、函数在没有声明的时候必须写在main函数之前,否则会出错;

猜你喜欢

转载自www.cnblogs.com/akne/p/13399304.html