当前位置:网站首页>C语言-入门-基础-语法-[主函数,头文件](二)
C语言-入门-基础-语法-[主函数,头文件](二)
2022-07-04 08:46:00 【胡安民】
一般来说,C语言的一个程序,是由头文件和主函数组成。
头文件
下面这条代码我们这个程序的头文件。
#include <stdio.h>
这是一条预处理指令,告诉编译器在运行之前要做一些预处理工作。通俗来讲就是把stdio.h
的内容原封不动地导入第一行。
如果我们想实现一些基本功能,比如说printf()输出,那我们就必须在开头写上这句代码,不然程序就会出错。头文件不止这一个
比如:
- ctype.h定义字符处理函数,例如判断字符是否空白字符、字符大小写转换;
- math.h定义数据函数,例如计算三角函数值、指数幂、对数、绝对值、平方、取整、求余等;
- stdio.h定义各种输入输出,包括标准输入输出、文件读写、格式化输入输出等;
- stdlib.h定义一些通用函数,例如内存分配和释放、字符串和数字类型互相转换、随机函数、排序、查找函数等;
- string.h定义字符串处理函数,例如求字符串长度、字符串复制、字符串比较、字符串查找等;
- time.h定义时间和日期处理函数,例如获取当前时间。
注:以上是常用的标准库头文件,其它后续用时介绍。
#include指令两种写法区别
#incldue <stdio.h>
表示在系统路径中寻址标准库定义的stdio.h
文件;
-#include "stdio.h"
表示先在当前程序目录下搜索自定义的stdio.h头文件,如果找不到,再去系统路径中寻找;- 如果是自己写的头文件,
用双引号""
,如果是用标准库或系统定义的头文件,使用尖括号<>
。
什么是主函数?
首先,主函数main,一个标准的主函数如下:
int main() // 这是主函数
{
return 0; // 主函数返回值
}
main翻译成中文是主要的、最重要的意思,而在C语言里面表示一个主函数。(稍后我们会讨论什么是计算机语言里面的函数,以及主函数在C语言程序中的存在意义。)双斜杠后面的为注释,打一个比较形象的比喻,注释就类似于老师在作业本上的批注。
一般来说,注释用于标注这段代码的用途或解释思路等。因为注释不会被当做代码进行编译,所以无论添加什么注释内容,都不会对代码的实际运行产生任何影响。
如上代码中,用注释标出了哪里为主函数,哪里是函数的返回值。
什么是函数?
我们先谈谈什么是函数?在大家的认知里面,函数是数学领域的一个名词,它可能是如下图所示:
但是,这只是数学领域中的函数,与编程语言中的函数完全不同。
在编程语言里面,你可以把函数看做一个盒子,这个盒子有如下几个特性:
- 开始执行时,函数可以被输入一些值
- 执行过程中,函数可以做一些事情
- 执行完成后,函数可以返回一些值
让我们看看我们的这个主函数,在这3个特性上,分别做了什么。
其中,int表明了函数的返回值类型,int是integer(整数)的缩写。main是函数名,main后面的括号()内为输入参数,目前为空。return后跟函数的返回值,为0。而0是一个整数,和函数名前面的int对应。
我们总结一下函数的写法公式:
函数返回值类型 函数名(函数输入参数值)
{
做点什么事情
return 函数返回值;
}
写一个自己的函数
我们不如趁热打铁,根据上面的函数写法的公式,写一个两个整数加法的函数。这个函数需要做到:输入两个整数,返回他们相加的结果。这个既然这个函数是用于计算加法的,我们把函数名取名为add。当然自定义函数的函数名可以按照自己的喜好来写,就算写成aaaaa也行。不过,为了函数名拥有语义化,方便人阅读理解,我们一般使用英文来作为函数名。
// 这一段代码被称之为add函数的函数定义
int add(int a, int b)
{
return a+b;
}
好的,那我们写完了一个add函数了。这一段代码被称之为add函数的函数定义。
主函数是C语言程序的入口
上面我们已经自己定义好了一个add函数,那我们需要怎样来使用它呢?add函数能直接运行嘛?, 答案是不行的。
所有的C语言代码都有一个起始入口,而这个入口就是主函数main。进入了主函数以后,才能经由主函数来调用其他函数。
这也意味着,每个C语言代码,只能有且只有一个main函数。我们把代码稍微修改,现在代码如下。
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int main()
{
int result;
result = add(2, 3);
printf("%d", result);
return 0;
}
当程序运行时,首先会进入主函数main。接着调用我们刚刚编写的add函数了。我们传了2个值分别是整数2和3的add函数。 函数的定义中规定,传2个参数,我们调用的时候,也必须传2个,并且类型也需要一致,否则编译会报错。
那么自然地,我们会想到,主函数是被谁调用的?主函数的返回值必须是int吗?主函数在程序开始的时候被自动调用,不需要在程序内主动调用主函数。而主函数的返回值会返回给调用这个程序的程序。C语言标准中规定主函数有返回值且必须是int。如果程序正常结束,一般将返回值设置为0。
调用函数,必须先知道函数
我们再来看看,编译器是怎么理解add这个标识符的。编译器会从代码开始,按照从上往下的顺序阅读代码。编译器首先看到了一个函数的定义,描述了一个叫add的函数。接着,在main中需要使用add,由于编译器已经知道了add的定义,因此编译器可以正常编译通过。
但是,如果将函数定义和函数调用反过来呢?首先,编译器看到了add标识符,编译器会很疑惑,add是什么呢?编译器无法理解add究竟是什么。因此,编译器将报错,并停止编译。
我们看看在软件中的效果是怎么样的
总结: 也就是在c中所有的函数必须声明在Main函数之前才行
边栏推荐
- awk从入门到入土(9)循环语句
- Educational Codeforces Round 115 (Rated for Div. 2)
- C # implements a queue in which everything can be sorted
- Parallel shift does not provide any acceleration - C #
- DM8 tablespace backup and recovery
- 埃氏筛+欧拉筛+区间筛
- Convert datetime string to datetime - C in the original time zone
- snipaste 方便的截图软件,可以复制在屏幕上
- 2022 gas examination registration and free gas examination questions
- Conversion of yolov5 XML dataset to VOC dataset
猜你喜欢
From scratch, use Jenkins to build and publish pipeline pipeline project
Developers really review CSDN question and answer function, and there are many improvements~
广和通高性能4G/5G无线模组解决方案全面推动高效、低碳智能电网
What if I forget the router password
ArcGIS application (XXII) ArcMap loading lidar Las format data
Codeforces Round #793 (Div. 2)(A-D)
Codeforces Round #750 (Div. 2)(A,B,C,D,F1)
[CV] Wu Enda machine learning course notes | Chapter 9
Codeforces Round #793 (Div. 2)(A-D)
C, Numerical Recipes in C, solution of linear algebraic equations, Gauss Jordan elimination method, source code
随机推荐
Four essential material websites for we media people to help you easily create popular models
Go zero micro service practical series (IX. ultimate optimization of seckill performance)
@Role of requestparam annotation
Educational Codeforces Round 115 (Rated for Div. 2)
std::is_ union,std::is_ class,std::integral_ constant
PHP session variable passed from form - PHP
Educational Codeforces Round 115 (Rated for Div. 2)
Fault analysis | MySQL: unique key constraint failure
Use preg_ Match extracts the string into the array between: & | people PHP
[BSP video tutorial] stm32h7 video tutorial phase 5: MDK topic, system introduction to MDK debugging, AC5, AC6 compilers, RTE development environment and the role of various configuration items (2022-
Technology sharing | MySQL parallel DDL
WordPress get_ Users() returns all users with comparison queries - PHP
没有Kubernetes怎么玩Dapr?
awk从入门到入土(7)条件语句
How to solve the problem of computer jam and slow down
awk从入门到入土(9)循环语句
ES6 summary
1211 or chicken and rabbit in the same cage
awk从入门到入土(6)正则匹配
@Role of pathvariable annotation