回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> C/C++教程 >> C 语言基础教程 >> 5. 如何编写函数
最 近 更 新
54. goto 语句
53. switch 语句推荐
52. continue 和 break
51. 条件运算符(?:)
50. if 语句嵌套推荐
49. 逻辑运算符推荐
48. 在循环中使用 if 语句推荐
47. if 和 else 连用推荐
46. if 语句
45. 循环应用实例 2
最 新 推 荐
53. switch 语句推荐
50. if 语句嵌套推荐
49. 逻辑运算符推荐
48. 在循环中使用 if 语句推荐
47. if 和 else 连用推荐
44. 循环应用实例 1推荐
43. 循环嵌套推荐
40. for 循环推荐
37. 关系运算符推荐
36. while 循环推荐
热 门 排 行
2. 第一个 C 程序推荐
31. 预处理指令 #define..推荐
1. C 语言简介
11. 基本数据类型:整型..推荐
24. 运算符的优先级和结..推荐
5. 如何编写函数
30. 字符串字面量推荐
13. 标识符命名规则
36. while 循环推荐
7. 第三个 C 程序推荐
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

5. 如何编写函数


来源:蚂蚁的 C/C++ 标准编程 作者:antigloss 等级:精品
发布于2005-10-22 17:50 被读5178次 【字体:

Antigloss 最后修改于 2006-12-23

    首先请看以下代码。

         /* my_func.c -- 这个程序使用了一个自定义函数 */
         #include <stdio.h>

         void butler(void);      /* ISO/ANSI C 函数原型 */

         int main(void) /* 函数头 */
         { /* 函数体开始 */
               printf("I will summon the butler function.\n");
               butler();  /* 调用 butler 函数 */
               printf("Yes. Bring me some tea and writeable CD-ROMS.\n");

               return 0;
         } /* 函数体结束 */

         void butler(void)   /* butler 函数 */
         {
               printf("You rang, sir?\n");
         }

    上面的代码中,butler 出现了 3 次。第一次是作为函数原型;第二次是函数调用语句;第三次是函数定义。下面我们分别对 butler 的这三次出现作详细说明。

    1. 函数原型是声明函数的一种方式,是 C89 标准加入的概念,老旧的编译器可能不支持函数原型。函数原型用于告诉编译器我们将要使用的函数的属性。例如,butler 的函数原型中,第一个 void 指明 butler 函数没有返回值;第二个 void 表明 butler 没有参数,也就是不接收任何参数。在 main 函数前面写了 butler 的函数原型后,当 main 函数调用 butler 时,编译器就能检测到 butler 函数调用语句是否正确。正如变量要声明后才能使用一样,函数也要声明后才能调用。本例中,如果 main 函数前面没有 butler 的函数原型,那么我们就不能在 main 函数中调用 butler 函数,除非我们把函数定义放在 main 函数之前。不过把函数定义置于 main 函数之前是一种不好的编程风格,因为这将导致我们花不少时间来寻找 main 函数的所在地。想象一下,如果我们写了几十个函数,如果每个函数定义都置于 main 函数之前,那样 main 函数还算好找;但是如果我们不小心把某些函数放在了 main 函数后面,也就是说 main 函数被放在一堆函数中间,那就很难找了!

    C89 标准出台之前,C 语言也支持函数声明,不过我们只能指定函数的返回值类型,而不能列出参数列表。例如:

            void butler();

C89 之前,函数就是像上面所写的那样声明的。C89 和 C99 标准都支持这种声明方式,不过它们同时也指出,这种声明方式迟早会被淘汰!所以我们不要使用这种声明方式,而要用函数原型。

    2. 在 main 函数里,语句 butler(); 的作用是调用 butler 函数。因为 butler 的参数列表为空(void),所以函数名(butler)后面的括号中不能有任何参数,也不能是 butler(void);

    3. butler 函数和 main 函数的定义方式一样,也是由函数头函数体构成。注意,函数定义仅仅是一个定义而已,并不能决定函数什么时候执行,也不能决定函数是否执行。本例中,main 函数什么时候调用 butler 函数,butler 函数就什么时候执行;如果 main 函数没有调用 butler 函数,那么 butler 函数就不会执行。

    所有 C 程序都是从 main 函数开始执行的。无论 main 函数处在源文件中的任何位置,中间也罢,末尾也罢,总之,C 程序一定从 main 函数开始执行。把 main 函数放在其它函数定义之前是一个好的编程习惯,因为这样可以让读者很快地弄清楚程序的结构。

    到目前为止,我们已经对函数有了一个概要的了解。在后续的教程中,我们还会更详细更系统地学习函数。

参考资料:C Primer Plus, 5th Edtion By Stephen Prata

本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 antigloss 共同所有,转载请注明原作者和出处。谢谢。



相关专题:暂无相关专题

上一篇:4. 第二个 C 程序
下一篇:6. 关键字和保留标识符

共有评论 13 条 网友评分 2分 查看全部评论

游客:和刀
评分:0
还是不懂,谁能帮我啊
游客:antigloss
评分:0
你不说哪里不懂,别人怎么能帮得了你呢?
游客:ICIOO
评分:0
讲的真不错
游客:林
评分:0
当然是这一节不懂了
游客:妮雅
评分:5
这个很不错..我借来当教案可以么?
游客:pavel
评分:5
不错,通俗易懂!!
游客:xaxsxd
评分:0
"不过把函数定义置于 main 函数之前是一种不好的编程风格",那怎样才是好的?
游客:antigloss
评分:0
像本例这样,就是一种不错的风格。

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss