一个程序开始运行时,运行的是主程序段。之后主程序调用的其他程序段就叫子程序。
C语言的程序段都是以函数形式存在,所以除了主程序main()以外,其他程序中出现的函数都是子程序。
子程序是程序中的一段代码,用于实现一定的功能。它可以在程序中被多次调用,避免了代码的重复编写,提高了代码的可维护性和可读性。
对子程序设计有以下几个要求:
可重用性:子程序应该是可重用的,可以在不同的程序中调用,提高了程序的效率和可维护性。
可读性:子程序应该是清晰、简单、易于理解的,避免复杂的控制结构和过多的嵌套,方便其他程序员理解和修改。
可维护性:子程序应该是易于维护的,要尽量避免使用全局变量和直接修改其他程序中的变量,以减少程序中的耦合性和出错的可能性。
可靠性:子程序应该是稳定、可靠的,避免出现逻辑错误、死循环等问题,以确保程序的正确性和稳定性。
可测试性:子程序应该是可测试的,即可以单独测试每个子程序的功能和性能,以确保程序的正确性和性能。
总之,好的子程序应该具有高可重用性、可读性、可维护性、可靠性和可测试性,能够提高程序的效率、可靠性和可维护性
一段程序,总得有一个开始执行的起始点,这个起始点一般我们叫他主程序。
在主程序中,对于会多次使用的代码,一般我们会将他包装成子程序或者函数,以方便相同代码仅写一次,可以多次调用(当然,有时候,为了让整个程序看起来更加的好维护,或者好理解,我们也编写一些仅使用一次的子程序或函数)
子程序和函数的最大区别在于,子程序在执行后,并不返回任何值,而函数式要返回某种类型的值的。
C语言中,子程序是通过函数来实现的,一个函数相当于一个有独立功能的子程序,子程序意在体现着main函数的作用。函数机制的实现通常需要经过设计、声明和调用来完成的。所有的函数在调用之前都必须声明,声明函数必须包括函数名,返回值两部分,参数列表是可缺省的。声明可以附加关键字,关于作用域的声明包括关键字extern和static,前者表明函数的定义不在这个文件中,但是它需要在这个文件中使用;后者声明的函数说明此函数只在此文件中使用,意即标记有static的函数允许在其他函数中存在同名函数。在函数声明之后就可以通过调用 *** 作符()来对函数进行调用 *** 作。函数的区分涉及到函数签名的概念,函数的签名一般包括它的返回值,函数名和参数列表,签名相同的函数被认为是相同的,这使得函数可以重载以实现函数的功能多样化。函数在被调用时,首先由系统根据签名确认被调用的函数,然后系统计算并为之分配足够的内存,调用函数将使用权交割给函数之后执行函数内部的语句,遇到return之后停止执行,然后返回值,释放内存。
C语言 把别的计算机语言中称“函数”或称“子程序”的程序块 统称为 “函数”,没有术语“子程序”。别的计算机语言中称为“子程序”的程序块,C语言叫 void 型 函数。
C语言 函数定义 出现在 main() 函数 以后的,则要在 main() 函数 以前 加写 函数原型声明。
例如:计算10个数的平均值,最大值,最小值子程序:
#include<stdioh>
#include<stdlibh>
void f(int n, int a, int a_max, int a_min, float a_mean);// 函数原型声明
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int a_max,a_min;
float av;
f(10,a,&a_max,&a_min,&av); // 函数调用
printf("max=%d min=%d mean=%f\n",a_max,a_min,av);
}
//函数定义
void f(int n, int a, int a_max, int a_min, float a_mean){
int i,b,s;
float m=00;
b = a[0]; s=a[0];
for (i=0;i<n;i++){
if (a[i] > b) b = a[i];
if (a[i] < s) s = a[i];
m = m + a[i];
}
a_mean = m / n;
a_max = b;
a_min = s;
}
如果把 函数定义 写到 main() 以前,就不要 函数原型声明 那行
子程序的末尾一定要有RETI指令,子程序的调用是LCALL和ACALL。
RETI是中断返回指令,这条指令的功能和RET指令相似,2条指令的不同之处是:本指令清除了中断响应时,被置1的MCS-51内部不可寻址的 “优先级生效”触发器清零。
执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。中断指令“RETI”作为中断跳出指令,除了将堆栈中保存着的地址取出,送回PC,使程序从主程序的中断处继续往下执行的作用外,还有将“优先级生效”触发器清零的功能。
扩展资料
单片机汇编指令中RETI和RET的区别
通常情况下,在普通的汇编子程序中用RET做返回,在中断服务子程序中用RETI起中断返回作用。两条指令都能从堆栈中d出断点地址并装入PC中,使CPU回到原来主程序的断点处继续运行。
然而,RET和RETI有本质的区别:当某一中断源响应后,单片机中的标志寄存器flag H和flag L其中的一个将会自动置位,用于阻止比它低级或同级的中断触发。RETI可以清除“优先级激活触发器”(即flag寄存器),以保证后续中断源的及时响应。
所以,当把RETI替换为RET后,该程序在第一次运行时可能不会出错,但在第二次运行时就会出错了。
以上就是关于c语言的子程序是什么全部的内容,包括:c语言的子程序是什么、什么是子程序,对子程序设计有什么要求、什么是程序中的主程序,子程序,函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)