推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

一个C程序可以由若干个源程序文件组成

   2023-06-06 网络整理佚名2230
核心提示:,包含标准输入输出头文件,这样程序就能够认识()函数,并执行其功能。,编译系统就会用第一次出现的这个函数(函数定义或函数调用)构造函数原型。在编写函数时的常见错误:当调用的函数与函数原型不相匹配时,程序会提示语法错误,并且当函数原型和函数定义不一致时,也会产生错误。

C程序可以由若干个源程序文件组成,每个源文件又可以由若干个函数、预处理命令和全局变量声明部分组成,每个函数由函数头和函数体组成。 c程序的结构如图所示。

作为一个程序开发人员,不可能每次写的时候都从最底层开始开发。 比如上面的例子,要向输出设备输入一串字符,我们只需要调用()函数即可。 至于如何“Hello C!” 显示,我们不关心。 我们知道()函数,在写程序的时候调用它,我们需要让程序知道它,这样我们才能使用()函数提供的功能,这需要使用#,包括标准输入和标准输出头文件,以便程序识别()函数并执行其函数。

C提供了丰富的函数集,我们称之为标准函数库。 标准函数库包含15个头文件,借助这些函数可以完成不同的功能。

例如,当【例2-1】中有#时,可以使用数学函数库头文件提供的平方根函数sq​​rt()求出半径为2时的平方根值1.414; 再比如,当程序包含头文件“.h”时,可以完成内存申请和释放等功能。

2.2.2 函数声明

标准C语言引入了一种新的更好的函数声明方法,即使用函数原型来指定函数的更多信息。 通过函数原型,可以将函数的名称和函数类型,以及形参的个数、类型和顺序通知给编译系统。 这样当调用该函数时,系统可以对其进行检查。

函数声明由函数返回类型、函数名称和形式参数列表组成。 形式参数列表必须包括形式参数类型,但形式参数不必命名。 这三个元素称为函数原型,函数原型描述了函数的接口。 定义函数的程序员提供函数原型,使用函数的程序员只需要编辑函数原型即可。

函数声明的一般形式是:

函数返回类型函数名(参数类型1,参数类型2,...);

函数声明包括函数的返回类型和函数名,见下面的例子。

01 int fun (int a, int b);
02 void display();
03 float fn (float x);

其中int、void、float都是函数返回类型,也属于数据类型。 fun 和 fn 是被调用函数的名称。 也就是说,fun()函数返回的数据类型是整型int; ()函数返回的类型为void,表示该函数没有返回值; fn()返回的数据类型是浮点型float。

fun(int a, int b)里面的a和b是形参,它们的参数类型都是int类型。 fn(float x)函数的内部参数x的类型为float类型。 函数声明中的形参名往往被忽略,如果在声明中提供了形参名,也只是作为辅助文件。 另外需要注意的是,函数声明是语句,后面的分号一定不能少!

为了进一步说明该功能,需要注意以下几点。

(1)函数名后必须有括号,不能省略,这是函数的一个特点。

(2)函数末尾必须有分号,不能省略。

(3)字符串末尾有这样一个内容“\n”,称为转义字符,其含义是将光标移动到下一行的行首,也就是换行,因为我们不能通过键盘命令直接换行,所以需要使用转义符; 比如输出内容后,想回到行首,重新输出内容,而键盘上没有对应的功能键,我们可以用回车转义符“\r”来代替. 当然,转义还包括其他内容,在后面的章节中会详细说明。

2.2.3 变量声明

在大多数语言中,在使用一个变量之前,必须声明该变量,C语言也是如此。 那么,什么是变量声明? 它的作用是什么? 变量声明实际上是在程序运行前告诉编译器程序使用的变量以及与这些变量相关的属性,包括变量的名称、类型和长度。 这样,在程序运行之前,编译器就可以知道如何为变量分配内存空间,从而可以对程序进行优化。

变量声明语句具有以下形式:

变量类型名称变量名称

变量声明包括两部分:变量类型名和变量名。 考虑以下示例:

01 int num
02 double area
03 char ppt

其中int、char为变量类型名,num、area、ppt为变量名。 其实变量类型名也是一种数据类型,也就是说变量num是int类型,area是类型,ppt是char类型。

变量类型名是C语言自带的数据类型和用户自定义的数据类型。 C语言自带的数据类型有整型、字符型、浮点型、枚举型和指针型。

变量名实际上是一个标识符。 当然,标识符的命名规则也适用于此。 另外,在命名变量时需要注意以下几点。

(1) 变量名区分大小写,变量Num和num是两个不同的变量。

(2)变量的命名最好与实际应用相关,例如:num一般表示数量,area表示面积等。

(3) 变量名必须在变量使用前。

暗示

如果不声明直接使用变量,编译器会报错。

让我们用一个例子来验证声明必须在变量使用之前。

[示例 2-2] 验证未声明的标识符不可用。

(1) 在C++6.0中,新建一个名为“.c”的[Text File]文件。

(2) 在编辑窗口中输入以下代码(代码2-2.txt)。

01 #include
02 int main(void)
03{
04 print ("output undeclaredvar num-%d\n",num);
05 return 0:
06}

【运行结果】

编译后报错,信息如下:

undeclaredvar.c(4): error C2065: ‘num': undeclared identifier

【实例分析】 本例中,没有声明,直接引用了标识符num。 编译器不知道num是什么,所以调试的时候编译器会报错。

【拓展训练】

在第 3 句和第 4 句之间插入语句:

04 int num=10;

或者:

04 int num;
05 num=10;

检查程序是否可以运行,是否仍然报错。

2.3 主要功能

每一个C程序都必须有一个且只有一个main函数,即main()函数,它是程序的入口点。 main() 函数有时用作驱动程序,按顺序控制和调用其他函数。 C程序由函数组成,使得程序易于实现模块化; main()函数后面的“()”不能省略,表示函数参数列表; “{”和“}”是函数开始和结束的标志,不能省略。

下图是主函数调用其他函数的示意图。

c语言数学函数_c语言函数中定义的变量_c语言中的数学函数

主函数main()可以放在程序的任何地方,但编译器会先找到它并从它开始运行。 它就像是汽车的引擎,控制着程序中各个部分的执行顺序。 下图是对main函数各部分名称的解释。

前面两个例子中,主函数main()的大写是int类型,int是 word的缩写,表示返回给系统的数据类型是整型数据,返回值为0,即体现在句子中。

2.4 函数定义区

C语言编译系统是从上到下编译的。 一般被调用函数放在调用函数后面时,前面要有语句,否则C语言自顶向下的编译系统将无法识别。 就像变量必须先声明后使用一样,函数在调用之前也必须先声明,否则无法调用! 函数的声明可以与定义分开。 需要注意的是,一个函数只能定义一次,但可以声明多次。

函数定义:

返回类型函数名(参数类型1参数名1,...,参数类型n参数名n)

{
函数体...
}
例如
int fun(int a,int b)
{
int c;
c=a+b;
return c;
}

程序中,如果main()函数在前面,函数声明必须写在mian(); 如果函数在main()前面,就不用在main()中写函数声明了!

让我们看一个函数声明和函数定义的综合示例,并比较它们的不同之处。

#include
int add(int x,int y);//函数声明语句
Main()
{
int a,b,c;
c=add(a,b);
printf("%d",c);
}
Int add(int x,int y)//函数定义
{
int z;
z=x+y;
return z;
}

2.5 注释过程

读者可能已经注意到,很多语句后面都带有“”符号,它们是什么意思呢?

上面提到,在编辑代码的过程中,我们希望加入一些解释性的文字来表达代码的意思,这是非常有必要的。

如果你花了很多精力,绞尽脑汁写了代码,如果你不写注释或者注释不够清楚,一年后你要用这段代码的时候,你就记不住所有的那一年的想法。 无奈之下,你只好重新分析,重新认识。 请问,当初一时的懒惰,值得吗? 再比如,一个团队一起开发一个程序,其他人需要对团队编写的代码进行二次开发。 用4个字来形容队员们此时的心情:欲哭无泪。 所以写代码的时候最好写注释,优点全没有缺点。

注释要求如下。

(1)用“”表示注释的开始和结束,注释的内容写在这两个符号之间。 注释表示语句的描述,不属于程序代码范畴,如【例1-1】和【例2-1】代码中“”之间的内容.

(2) “/”和“*”之间没有空格。

(3) 注释可以单行注释,也可以多行注释,不允许嵌套注释,嵌套会出错,如:

有用 */

把这个注释放在程序中,不仅起不到解释的作用,反而会使程序产生一种错觉。 原因是“this”先于

“”,注释结束,“ */”被编译器认为是违反语法规则的代码。

2.6 代码规则

从编写代码清晰、易读、易懂、易维护的角度出发,编写程序应遵循以下规则。

(1) 一篇描述或一篇陈述占一行。 我们统称空格字符、制表符、换行符等为空白字符。 除了字符串、函数名和关键字外,C忽略所有的空白字符,当它们出现在其他地方时,只起到间距的作用,编译器忽略它们。 因此,程序中是否使用空格对程序的编译没有影响,但在程序适当的地方使用空格可以增加程序的清晰度和可读性。

例如下面的代码:

int
main(
){
printf( "Hello C!\n”
);
}

(2)用“{”和“}”括起来的部分通常表示程序的某一层结构。 “{”和“}”一般与结构语句的首字母对齐,单独占一行。

例如下面的代码:

int main()
{
printf( "Hello C!\n");
return 0;}

(3) 较低级别的语句通常比较高级别的语句缩进。 一般来说,缩进是指存在两个空格或一个制表符空间。

例如下面的代码:

int main()
{
print( "Hello C!\n" );
{
printf( "Hello C!\n" );
}
return 0;
}

(3)在程序中写注释,说明程序做了什么,也可以增加程序的清晰度和可读性。

(4)大家在编程时要努力遵循上面介绍的4条规则,养成良好的编程习惯。

2.7 专家拨号

正如变量可以在头文件中声明并在源文件中定义一样,函数也可以在头文件中声明并在源文件中定义。 将函数声明直接放在每个使用该函数的源文件中是大多数新手习惯并喜欢它的方式,这是合法的。 但是这种方法是老式的并且容易出错。 解决方法是将函数的声明放在头文件中,这样可以保证指定函数的所有声明都是一致的。 如果一个函数的接口改变了,只需要修改它唯一的声明。

在定义函数的源文件中包含提供函数声明的头文件,使编译器能够检查函数的定义是否与声明一致。 特别是,如果函数定义和函数声明具有相同的参数列表但返回类型不同,编译器将发出警告或错误消息以指出差异。

那么了解了函数声明和函数定义之后,它们有什么区别呢? 我们知道函数的定义是一个完整的函数单元,它包括函数类型、函数名、形参和形参类型、函数体等,而在一个程序中,一个函数只能定义一次,而函数头和花括号之间没有分号。 函数声明只是描述定义函数的返回值类型,以告知系统在这个函数中调用了什么类型的函数。 它不包含函数体,多次调用函数后,应在每个调用函数中进行相应的声明。 函数声明是说明句,必须以分号结尾!

学习了这节课的内容后,读者是不是对C语言有了更深的理解呢? 下面我们就来看看我们在使用函数时需要注意的一些问题。

1、函数声明中的形参名可以省略,但所有的形参名及其对应的数据类型必须写在函数定义的头部。

2、函数原型的主要作用是声明函数的返回值类型和函数期望接受的参数个数、类型和顺序。

3、如果程序中没有某个函数的函数原型(没有描述),编译系统将使用第一次出现的函数(函数定义或函数调用)来构造函数原型。

4. 默认情况下,编译系统默认的函数返回值是int。

编写函数时常见的错误:当调用的函数与函数原型不匹配时,程序会提示语法错误,当函数原型与函数定义不一致时,也会产生错误。

本文节选自《C语言从入门到精通(第二版)》

本书面向C语言零基础读者,介绍基本的入门知识和实际操作技巧。 全书紧扣软件开发的实际需要。 首先向读者展示该语言的背景知识和应用范围,然后通过实例和自测对相关知识点进行系统的讲解,同时兼顾实际开发项目经验。 为增强实用性,光盘还特地赠送了考试认证、求职面试等题库,供读者学习学习。 最后,为了帮助初入职场的从业者顺利进入角色,光盘中还提供了职业规划建议和相关发展文档。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON