不是说C语言不允许在函数中c语言怎么定义函数数吗

C语言函数练习题;一、选择题;1.一个完整的C源程序是【】;A)要由一个主函数或一个以上的非主函数构成;B)由一个且仅由一个主函数和零个以上的非主函数构;C)要由一个主函数和一个以上的非主函数构成;D)由一个且只有一个主函数或多个非主函数构成;2.以下关于函数的叙述中正确的是【】;A)C语言程序将从源程序中第一个函数开始执行;B)可以在程序中由用户指定任意一
C语言函数练习题
一、选择题
1. 一个完整的C源程序是【 】。
A)要由一个主函数或一个以上的非主函数构成
B)由一个且仅由一个主函数和零个以上的非主函数构成
C)要由一个主函数和一个以上的非主函数构成
D)由一个且只有一个主函数或多个非主函数构成
2. 以下关于函数的叙述中正确的是【 】。
A)C语言程序将从源程序中第一个函数开始执行
B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束
D)main可作为用户标识符,用以定义任意一个函数
3. 以下关于函数的叙述中不正确的是【 】。
A)C程序是函数的集合,包括标准库函数和用户自定义函数
B)在C语言程序中,被调用的函数必须在main函数中定义
C)在C语言程序中,函数的定义不能嵌套
D)在C语言程序中,函数的调用可以嵌套
4. 在一个C程序中,【 】。
A)main函数必须出现在所有函数之前
B)main函数可以在任何地方出现
C)main函数必须出现在所有函数之后
D)main函数必须出现在固定位置
5. 若在C语言中未说明函数的类型,则系统默认该函数的数据类型是【 】
6. 以下关于函数叙述中,错误的是【 】。
A)函数未被调用时,系统将不为形参分配内存单元
B)实参与形参的个数应相等,且实参与形参的类型必须对应一致
C)当形参是变量时,实参可以是常量、变量或表达式
D)形参可以是常量、变量或表达式
7. C程序中各函数之间可以通过多种方式传递数据,下列不能用于实现数据传递的方式是
A)参数的形实结合
B)函数返回值
C)全局变量
D)同名的局部变量
8. 若函数调用时参数为基本数据类型的变量,以下叙述正确的是【 】。
A)实参与其对应的形参共占存储单元
B)只有当实参与其对应的形参同名时才共占存储单元
C)实参与对应的形参分别占用不同的存储单元
D)实参将数据传递给形参后,立即释放原先占用的存储单元
9. 函数调用时,当实参和形参都是简单变量时,他们之间数据传递的过程是【 】。
A)实参将其地址传递给形参,并释放原先占用的存储单元
B)实参将其地址传递给形参,调用结束时形参再将其地址回传给实参
C)实参将其值传递给形参,调用结束时形参再将其值回传给实参
D)实参将其值传递给形参,调用结束时形参并不将其值回传给实参
10. 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是【 】。
A)函数的实参和其对应的形参共占同一存储单元
B)形参只是形式上的存在,不占用具体存储单元
C)同名的实参和形参占同一存储单元
D)函数的形参和实参分别占用不同的存储单元
11. 若用数组名作为函数调用的实参,则传递给形参的是 【 】。
A) 数组的首地址
B) 数组的第一个元素的值
C) 数组中全部元素的值
D) 数组元素的个数
12. 若函数调用时,用数组名作为函数的参数,以下叙述中正确的是【 】。
A)实参与其对应的形参共用同一段存储空间
B)实参与其对应的形参占用相同的存储空间
C)实参将其地址传递给形参,同时形参也会将该地址传递给实参
D)实参将其地址传递给形参,等同实现了参数之间的双向值的传递
13. 如果一个函数位于C程序文件的上部,在该函数体内说明语句后的复合语句中定义了
一个变量,则该变量【 】。
A)为全局变量,在本程序文件范围内有效
B)为局部变量,只在该函数内有效
C)为局部变量,只在该复合语句中有效
D)定义无效,为非法变量
14. C语言中函数返回值的类型是由【 】决定。
A)return语句中的表达式类型
B)调用函数的主调函数类型
C)调用函数时临时
D)定义函数时所指定的函数类型
15. 若在一个C源程序文件中定义了一个允许其他源文件引用的实型外部变量a,则在另一
文件中可使用的引用说明是【 】。
16. 定义一个void型函数意味着调用该函数时,函数【 】
A)通过return返回一个用户所希望的函数值
B)返回一个系统默认值
C)没有返回值
D)返回一个不确定的值
17. 若定义函数float *fun( ),则函数fun的返回值为【 】。
A)一个实数
B)一个指向实型变量的指针
C)一个指向实型函数的指针
D)一个实型函数的入口地址
18. C语言规定,程序中各函数之间【 】。
A)既允许直接递归调用也允许间接递归调用
B)不允许直接递归调用也不允许间接递归调用
C)允许直接递归调用不允许间接递归调用
D)不允许直接递归调用允许间接递归调用
19. 若程序中定义函数
float myadd(float a, float b)
{ return a+b;}
并将其放在调用语句之后,则在调用之前应对该函数进行说明。以下说明中错误的是
A)float myadd( float a,b);
B)float myadd(float b, float a);
C)float myadd(float, float);
D)float myadd(float a, float b);
20. 关于以下fun函数的功能叙述中,正确的是【 】。
int fun(char *s)
char *t=s;
while(*t++) ;
return(t-s);
A) 求字符串s的长度
B) 比较两个串的大小
C) 将串s复制到串t
D) 求字符串s所占字节数
21. 下面程序段运行后的输出结果是【 】 (假设程序运行时输入5,3回车)
void swap( )
t=a; a=b; b=t;
scanf(&%d,%d&, &a, &b);
printf (&a=%d,b=%d\n&,a,b);
A) a=5,b=3
B) a=3,b=5
22. 以下程序运行后的输出结果是【 】。
fun(int a, int b)
int x=3,y=8,z=6,r;
r=fun(fun(x,y),2*z);
printf(&%d\n&,r);
23. 以下程序的运行结果是【 】。
void f(int a, int b)
t=a; a=b; b=t;
int x=1, y=3, z=2;
if(x&y) f(x,y);
else if(y&z) f(x,z);
else f(x,z);
printf(&%d,%d,%d\n&,x,y,z);
24. 以下程序运行后的输出结果为【 】。
int *f(int *x, int *y)
int a=7,b=8,*p,*q,*r;
p=&a, q=&b;
printf(&%d,%d,%d\n&,*p,*q,*r);
25. 以下程序的正确运行结果是【 】。
#inclued&stdio.h&
int k=4,m=1,p;
p=func(k,m);
printf(“%d”,p);
p=func(k,m);
printf(“%d\n”,p);
func(int a,int b)
static int m=0,i=2;
return (m);
26. 以下程序的功能是计算函数F(x,y,z)=(x+z)/(y-z)+(y+2×z)/(x-2×z)的值,请将程序补充
#include&stdio.h&
float f(float x,float y)
value= 【1】;
float x,y,z,
scanf(&%f%f%f&,&x,&y,&z);
sum=f(x+z,y-z)+f(【2】);
printf(&sum=%f\n&,sum);
【1】A) x/y
C) (x+z)/(y-z)
D) x+z/y-z
【2】A) y+2z,x-2z B) y+z,x-z
C) x+z,y-z
D) y+z*z,x-2*z
27. 以下程序的功能是根据输入的字母,在屏幕上显示出字符数组中首字符与其相同的字符
串,若不存在,则显示“No find,good bye!”,请将程序补充完整。
#include&stdio.h&
char PriStr(char ch1)
int i=0,j=0;
static char *ch2[]={&how are you&, &glad to meet you&,&anything new&,
&everything is fine&,&very well,thank you&,&see you tomorrow&};
while(i++&6)
if(ch1==【1】 )
puts(【2】);
printf(&\nPleae enter a char:&);
ch=getchar();
三亿文库包含各类专业文献、外语学习资料、中学教育、高等教育、行业资料、幼儿教育、小学教育、应用写作文书、31函数练习题(C语言)带答案等内容。 
 C语言函数习题及答案_文学_高等教育_教育专区。C语言习题及答案 函数习题 第6章一、选择题 函数习题 1. 一个完整的 C 源程序是【 】。 A)要由一个主函数...  C 语言函数复习题答案 1、 /*编写程序, AB(A 的 B 次幂)。求 要求:实现求 AB 的功能用函数实 现,在主函数中实现数据 A、B 的输 入和结果的输出。 ...  第5 章函数 习题及解答 一.选择题。 1.若已定义的函数有返回值,则以下关于...C 语言程序中的 main()函数必须放在程序的开始部分 答案:C 解析: C 语言的...  C语言习题全集+答案(至函数)_从业资格考试_资格考试/认证_教育专区。第一单元一、 选择题 1. C 语言的基本构成单位是: A. 函数 A. 主过程 B. 函数和过程...  C语言上机练习题及答案_IT认证_资格考试/认证_教育专区。1 输入三个整数 x,y...} 3 用格式输入函数输入 3 个字符, 并用输出函数反向输出 3 个字符和他们的...  非常好的C语言章节习题集带答案_计算机软件及应用_IT/计算机_专业资料。第 1 ...A.主程序 B.子程序 C.函数 D.过程 8.C 源程序中不能表示的数制是___。...  大学C语言期末考试练习题(带详解答案)_理学_高等教育_教育专区。一、 单项选择题 1. ( A )是构成 C 语言程序的基本单位。 A、函数 2.C 语言程序从 B、...  C语言练习题及答案_IT认证_资格考试/认证_教育专区。单项选择题: 1. A )是构成 C 语言程序的基本单位。 ( A、函数 2.C 语言程序从 B、过程 C C、子程序...  C语言基础练习题及答案_IT认证_资格考试/认证_教育专区。很好的,做了之后很有...A.程序行 B.语句 C.函数 D.字符 下列说法中,错误的是( )。 A.每个语句...C语言中函数的声明、定义及使用的入门教程
投稿:goldensun
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了C语言中函数的声明、定义及使用的入门教程,重点讲述了main函数的相关知识,需要的朋友可以参考下
对函数的“定义”和“声明”不是一回事。函数的定义是指对函数功能的确立,包括指定函数名,函数值类型、形参及其类型以及函数体等,它是一个完整的、独立的函数单位。而函数的声明的作用则是把函数的名字,函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时进行对照检查(例如,函数名是否正确,实参与形参的类型和个数是否一致),它不包括函数体。——谭浩强 ,《C程序设计》(第四版),清华大学出版社,2010年6月,p182
这段论述包含了许多概念性错误,这些概念错误在许多C语言书中都同样普遍存在。为了说明这些错误,首先来回顾一下C语言演变和发展的一些情况。
最早,C语言的代码可以这样写:
printf("hello,world!\n");
注意,这段代码对标识符printf没有进行任何说明。这是因为printf()函数的返回值为int类型。当时的C语言规定,对于没有任何说明的函数名,编译器会默认为返回值为int类型,因此对这样的函数名可以不做任何说明。那个时期的C语言,很多情况下int可以不写。例如main()函数返回值的类型为int就可以不写。
但是需要特别说明的是,这种“省劲”的写法已经过时,从C90标准起,这种写法就步入了被逐步抛弃的过程(尽管当时还没有完全立即废止)。C99废除了隐式函数声明法则(remove implicit function declaration),另外,省略main()前面的int也已经不再容许了。
在C语言早期,尽管有时不需要对函数名进行说明,但有些情况下对函数名进行说明还是必须的,比如:
double sqrt();
int main()
printf("%f\n" , sqrt(9.) );
这是因为函数sqrt()返回值的类型不是int类型而是double类型,编译器编译时需要知道sqrt(9.)这个表达式的类型。
不难注意到这种对函数名的说明非常简单,这是最早期的一种函数类型说明的形式。这种说明只着重说明函数名是一个函数及其返回值类型,如果程序员在调用函数时存在参数类型或个数方面的错误编译器是无法察觉的,因为函数类型说明中“()”内没有任何信息。
这种办法只说明了函数名与()进行运算的结果也就是函数返回值的数据类型,无法进一步检查参数方面的错误是这种写法的不足之处。
如果不写函数类型说明,也可以把函数定义写在函数调用之前:
double square ( double x)
return x *
int main(void)
printf("%f\n" , square(3.) );
这表明函数定义也具有对函数名的类型加以说明的效果,因此从这个意义上来说,函数定义也是一种对函数类型的说明。这种办法可以检查出函数调用时在参数个数和类型方面的错误。
但是,用这种办法说明函数名并不好,因为这样做在编程时还需要考虑应该把哪个函数定义写在前面,哪个写在后面的问题。假如函数A调用函数B,函数B调用函数C,函数C又调用函数A,究竟如何安排函数定义的顺序就会让人感到无所适从。此外这种办法也不利于代码的组织,在由多个源文件组成的源程序时,这种写法就更会捉襟见肘、漏洞百出。因此,在1990年,C标准借鉴C++语言规定了一种新的说明函数名的方法,这就是函数原型(Function Propotype)式说明函数类型的方法:
double square ( double ); //或 double square ( double x)
int main(void)
printf("%f\n" , square(3.) );
double square ( double x)
return x *
使用这种办法,不但可以检查函数调用时参数类型和个数方面的错误,同时解决了源代码的组织问题,因为程序员不必再考虑该把哪个函数写在前面、哪个写在后面这种无聊的问题了。这种办法全面地说明了函数名的数据类型。此外要说明的是,把形参及其数据类型写在“()”内形式的函数定义也属于函数原型(Function Propotype)的范畴。
由此可见,古老的、不对参数进行任何说明的函数类型说明方式、函数定义以及函数原型式的函数类型说明方式都具有说明函数名意义的效用。从这个意义上讲它们都是函数声明。在C语言中,声明(Declaration)这个词的本义就是指定标识符的意义和性质(A declaration specifies the interpretation and attributes of a set of identifiers.),某个标识符的定义(Definition)同时也是这个标志符的“声明”(Declaration)。函数定义(Function definition)则意指包括函数体。(A definition of an identifier is a declaration for that identifier that: ……for a function, includ)。函数原型则特指包括说明参数类型的函数声明,它同样包含用这种方式写出的函数定义。
现在回过头来看样本中的第一句话:“对函数的“定义”和“声明”不是一回事”。由于函数定义本身就是一种函数声明,怎么可以说它们不是一回事呢?这句话的逻辑就如同说“男人”和“人”不是一回事。你可以说男人和女人不是一回事,因为他们没有交集。但没法说男人和人不是一回事,因为男人是人的子集,男人就是人的一种,怎么可以说男人和人不是一回事呢?
那么,不带函数体的函数声明应该如何称呼呢?在C语言中,它们叫被做“函数类型声明”(Function type declaration)。函数类型声明最主要的特点是声明了函数名是一个函数及其返回值的类型,如果也声明了参数的类型,则是函数原型式的函数类型声明。
样本中的“而函数的声明的作用则是把函数的名字,函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时进行对照检查(例如,函数名是否正确,实参与形参的类型和个数是否一致),它不包括函数体”这句话同样不通。其主要错误是它混淆了“函数原型式类型声明”与“函数声明”这两个概念,前一个概念只是后一个概念的子集。函数声明中不但包含“函数类型声明”,也包含“函数定义”和老式的“函数类型声明”。由于函数定义本身就是一种函数声明,所以无法断定函数的声明是否包括函数体;而且老式的函数类型声明(例如double sqrt();)也属于函数声明,这种函数声明并不检查参数类型及个数方面的错误。此外函数声明也并没有检查“函数名”正确与否的功能。
这段文字中的“函数类型”这个概念也有错误,函数类型所描述的不但包括函数返回值类型,也可能一并描述参数的个数和类型(如果是函数原型),因此不能与“形参的类型、个数”相提并论。
现代的C语言的函数定义和函数类型声明都采用函数原型式的风格,C99把旧的非原型形式视为过时,这意味着非原型形式以后可能被禁止。
main()函数
在各种C语言书上,能看到各式各样main()函数的写法,简直令人无所适从,这是这么回事?原因主要有两个:一个是随着C语言的发展和演化,main()函数的写法也在不断变化;另外,某些书籍写法不规范或误导的现象也同时存在。
最初main()函数的写法非常简洁,那个时候的C程序员哪怕一个字符似乎都不肯多写。不知道是因为当时键盘质量不好还是因为编辑器太糟糕的缘故,那个时代的C程序员似乎惊人地一致崇尚“简约”——甚至可以说是“至简”。
printf("hello,world\n");
这就是main()函数最古老的写法,K&R在他们的经典名著《The C Programming Language》中的第一个C语言源程序(1978)。这种写法是那个时代的主流。
简直和裸体差不多,连#include&stdio.h&也没有么?在《The C Programming Language》的第一版中确实没有。那个时代的C语言,返回值类型为int的函数不用声明。不过在该书的第二版(1988)中这个程序被改成了:
#include &stdio.h&
printf("hello,world\n");
返回值类型为int的函数不用声明的规则改变了吗?规则没有改变。改变了的是观念,人们已经不再倾向于代码的“至简”,而开始倾向于在代码中交代清楚每一个标识符的来龙去脉。从C89开始倡导在函数调用之前一定要有函数声明,但并没有强求,而在C99这已经是强制性的要求了。由于《The C Programming Language》第二版正值ANSI C标准颁布(1989)前夕出版,所以这种变化也应该视为ANSI C标准的倾向性以及K&R对新标准的认同。尽管这个例子没有完全反映出来这种认同。
为什么说没有完全反映出来这种认同呢?因为这个main()的定义并没有按照函数原型(Function prototype)的方式来写,C90中规定不带参数的main()函数应该这样写:
int main(void) { /*. . .*/}
但同时规定那个int可以省略。C90把()内不写任何内容视为过时的写法,尽管C90无奈地容忍了它(The use of function declarators with empty parentheses (not prototype-format parameter type declarators) is an obsolescent feature.)。
为什么要容忍?因为有许多老式的代码还在用。
如果以C99的标准看这个main()写得如何呢?C99不容许省略int。但同样只把()内不写任何内容视为过时,而没有完全禁止,可见习惯力量的顽固。
那又为什么说K&R对新标准的认同呢?《The C Programming Language》第二版中的其他函数定义和函数类型声明基本上都改成了函数原型风格。比如,在讲解main()函数的参数时,K&R把原来的main()函数
#include &stdio.h&
main(argc,argv)
char *argv[];
#include &stdio.h&
main(int argc, char *argv[])
前一个写法今天已经差不多绝迹,后一个main()以今天的眼光来看有些奇怪,main()的参数是用函数原型风格写的,但却没有写main()返回值的类型,给人有点半新半旧的感觉。尽管不能说它违背C90(因为C90容许不写main()前面的int),但如果写上了返回值的类型int,就同时满足现代C99标准的要求了。
这里出现的“return 0;”是怎么回事?这在现代C语言中已经是司空见惯了,它返回给操作系统一个值以表明程序是在何种状态下结束的。但在另一段代码中,K&R似乎又走得太远:
#include &stdio.h&
main(int argc,char *argv[])
int found = 0 ;
/*……计算found的值 */
这个实在有些“标新立异”,居然把计算结果返回给了操作系统,颇有突破常规之嫌。
那前面几个没有“return 0;”的main()函数会怎么样?按照C90标准,会返回一个不确定的int类型的值,如果确实不关心这个返回值是多少,不写确实可以。但C99却要求编译器在编译的时候帮忙给补上这个“return 0;”,C99在必须写int这个问题上没有迁就懒人,但在这里却对偷懒的做法给予了迁就。 问:如果确实不关心main()函数的返回值,把main()的返回值定义为void类型如何?我看到许多书上都这样写的。
#include &stdio.h&
void main()
printf("This is a C program.\n");
这在C99之前是一种野路子写法,究竟从哪里冒出来的,无据可考。但前几年的主流教科书中这种写法很常见。K&R(C语言的发明者)没有这样写过,C90国际标准也不承认这种写法。Bjarne Stroustrup(C++语言的创始人)在他的关于C++的FAQ中,在回答是否可以写“void main()”时愤怒地回答说这种写法在C++和C中都不曾有过。事实上,很多C语言专家都认为“void main()”非常邪恶。
因此,在C99之前,这是不符合标准的写法。尽管这段代码的功能似乎是输出“This is a C program.”,但其实却不是一个“C program”。
但是有时这样写并没有产生错误啊?首先,C语言的错误不一定反应在编译、链接或运行过程中。你输出一个垃圾值也可能一路通过编译、链接或运行,但这不说明你的代码没有错误,更不能说明这样的代码正确、有意义。其次,这样的写法在有些编译器下程序会产生崩溃或得到警告。这说明这种写法至少不普遍性适用的。可以说,如果不是C99标准,这种写法根本没有立锥之地。
C99给了这种写法以立足之地么?从某种意义上也许可以这样理解。因为K&R没承认过这种写法,C90根本不承认这种写法,C99虽然没有正式承认这种写法,但为这种写法留了一个后门:“It shall be defined ……or in some other implementation-defined manner”。这意思就是说,如果编译器明确声称允许void main()这种写法的话,那么C99不再象C90那样简单认为这种写法违背C标准。
但是不管怎么说,这种写法最多是某些编译器的一种“方言土语”,如果没有特殊理由,比如仅仅是工作在某个特殊环境,且仅仅使用特定的编译器而根本不考虑程序的可移植性,为什么不写普遍适用的形式呢?
既然很多C语言专家都认为“void main()”非常邪恶,C99为什么包容这种写法呢?很难确定C99是否就是打算专门想把这种写法也“收容”在标准之列。因为除了void main(),还有另外一些main()函数的写法被C90排除在标准之外了。而现在,这些写法在理论上也具备了符合C99标准的可能性。
还有什么样的main()函数?很多编译器都支持下面的main()的写法:
int main(int argc, char *argv[], char *env[])
居然有3个形参,那个env是做什么用的?那个参数可以使程序获得环境变量。
什么叫环境变量?简单地讲可以理解为操作系统记录的一些数据,比如计算机的名字,操作系统放在哪里等等。应用程序在运行时可能要用到这些信息,这时可以通过env这个参数来获得。
如果编译器不支持main()的第三个参数怎么办?标准库函数也可以达到同样的目的。
#include &stdlib.h&
char *getenv(const char *name);
是否可以说void main()和int main(int argc, char *argv[], char *env[])也符合C99标准呢?恐怕还不能这么说,现在只是不能说这两种写法一定不符合C99标准。但这两种写法不符合C90标准是确定的,这两种写法的可移植性很差也是确定无疑的。C99标准在这里写的很模糊,没有进一步界定“implementation-defined manner”的含义。除非编译器声明遵守C99标准,且容许这两种写法,否则断言这两种写法符合C99标准属于空穴来风。
有人说“C99建议把main函数指定为int型”,这种说法对吗?显然不对。因为C99并非绝对不包容返回值非int类型的main()。正确的说法是,C90要求main()函数的返回值一定得是int型。但C90容许不写那个int,而C99则要求必须写上这个“int”。
下面这种风格如何?
#include &stdio.h&
int main()
printf("This is a C program.\n");
这个写法有点不伦不类。返回值的类型int写了,这个和C89的倡导或C99的要求一致,但是()里面什么都不写,又与标准的所倡导的风格不符,所以说不伦不类。这种写法目前的标准依然容许,但属于标准目前尚能容忍的但即将过时的(obsolescent)写法,被抛弃只是早晚的问题。这种写法就如同古代的函数形参的写法一样:
main(argc,argv)
char *argv[];
都属于历史的垃圾。
见过在main()的函数体的“}”之前前写一句getch();,这个是怎么回事?这个是时代的产物。在PC从DOS时代转变为Windows时代的过程中,DOS时代开发的IDE(主要是TC)无法在运行程序后显示输出结果,为了在运行后从容仔细地观察一下运行结果再返回IED界面,加上了这么一句,人为地延长程序运行时间(因为getch()会等待用户输入一个字符)。但这与main()本身的结构无关。这条语句不具备普遍意义,只是将就过时的IDE的一种权宜之计而已。所谓不具备普遍意义是指,第一,真正的程序往往不需要这条语句,就是说这条语句与程序功能无关;第二,getch()这个函数并不是标准函数,只有个别的编译器才支持它,在其他编译器上写这条语句,很可能行不通。
为什么不用getchar()这个标准库函数呢?getchar()的功能和getch()有点区别,前者会在标准输出设备上显示用户键入的字符,这显得很不利索,而后者则不会显示用户所键入的字符,更接近“Press Any Key to continue……”的效果。
有的代码在main()函数结束前写system("PAUSE");,是否也是这个意思?是的。这也是一种人工制造的“请按任意键继续. . .”,与程序功能结构无关,只是为了方便地观察输出结果。但是这种写法比调用getch()要好,因为system()函数是标准库函数,各个编译器都提供支持。
有一种说法,“在最新的C99标准中,只有以下两种定义方式是正确的:”
int main( void )
int main( int argc, char *argv[] )
这种说法对吗?
这种说法显然不对。但可以确认的是这两种定义方式一定正确。不但在C99来说是正确的,以C89来说也是正确的。
还有一种写法:
int main( void )
return EXIT_SUCCESS;
那个EXIT_SUCCESS是怎么回事?
return EXIT_SUCCESS;是与return 0;等价的一种文雅的写法。EXIT_SUCCESS是在stdlib.h中定义了的符号常量,返回这个值表示程序任务完成后程序退出。在stdlib.h定义的另一个符号常量EXIT_FAILURE,通常用于程序无法完成任务而退出。
实在太眼花缭乱了,需要记住这么多吗?显然没必要。很多东西都是历史原因遗留下的垃圾。
如果学习C语言,应该记住或使用哪种呢?显然是:
int main( void )
int main( int argc, char *argv[] )
第一,他们普遍适用,不存在可移植性的问题;
第二,就目前看,他们不存在任何过时或即将过时的成分。当然,如果喜欢文雅,不写return 0;而写EXIT_SUCCESS也可以。 顺便说一句,有的学习者记不住带参数main()函数两个形参的名字。其实这两个形参的名字也可以自己取,不一定用那两个名字,只要记住类型就可以了。第二个参数的类型也可以是char **,这和原来的是等价的。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 matlab不允许函数定义 的文章

 

随机推荐