| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 645 人关注过本帖
标题:函数声明的问题!高手解答下!
只看楼主 加入收藏
diouf3
Rank: 1
等 级:新手上路
帖 子:17
专家分:5
注 册:2010-5-8
结帖率:88.89%
收藏
已结贴  问题点数:5 回复次数:6 
函数声明的问题!高手解答下!
如果main函数在前,而子函数在后的话,必须先声明子函数!
但有时却不需要例如这个程序:
main()
{ int a=10,b=20;
  printf("a=%d,b=%d\n",a,b);
  swap(&a,&b);               /*两个整型变量的值进行交换*/
  printf("a=%d,b=%d\n",a,b);
}
swap(int *p,int *q)
{ int t;
  t=*p;*p=*q;*q=t;
}
在主函数中并没有对swap这个函数进行声明,但在TC2.0下通过编译。
但有时我以为这样可以,就不声明了,但编译时又报错!
不知道什么地方出问题了!

还有个问题就是
while((c=getchar())!=EOF);
想要结束这个循环需要输入什么啊?
EOF不知道什么意思?


[ 本帖最后由 diouf3 于 2010-7-28 18:18 编辑 ]
搜索更多相关主题的帖子: 解答 声明 函数 
2010-07-28 18:16
liuzhengshen
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:141
注 册:2010-4-23
收藏
得分:0 
应为编译是从上到下编译的,编译到swap函数时就会出错就找不到swap函数体了必须现在main函数前面加个函数声明编译器才能找到swap函数
2010-07-28 18:40
diouf3
Rank: 1
等 级:新手上路
帖 子:17
专家分:5
注 册:2010-5-8
收藏
得分:0 
2楼没看明白我说的啊,我的意思是没声明怎么还通过编译了?
2010-07-28 21:03
rainbow1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:277
专家分:839
注 册:2010-5-19
收藏
得分:0 
基于C标准可以不用先声明。
2010-07-28 21:31
encounter
Rank: 5Rank: 5
来 自:扬州
等 级:职业侠客
威 望:2
帖 子:150
专家分:359
注 册:2010-7-24
收藏
得分:0 
首先
不声明在 Turbo C ,VC++中石通不过的

当用getchar进行输入时,如果输入的第一个字符为有效字符(即输入是文件结束符EOF,Windows下为组合键Ctrl+Z, Unix/Linux下为组合键Ctrl+D),那么只有当最后一个输入字符为换行符'\n'(也可以是文件结束符EOF)时, getchar才会停止执行,整个程序将会往下执行。譬如下面程序段:
while((c = getchar()) != EOF){
    putchar(c);
}
执行程序,输入:abc,然后回车。则程序就会去执行puchar(c),然后输出abc,这个地方不要忘了,系统输出的还有一个回车。然后可以继续输入,再次遇到换行符的时候,程序又会把那一行的输入的字符输出在终端上。

ping   nbtstat   netstat   tracert    nat   at    ftp   telnet..................
2010-07-28 21:54
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:2 
关于EOF的使用确实是一个指的注意的问题:引用一位网友blog中的话希望可以让你明白:
EOF作为文件结束符时的情况:
EOF虽然是文件结束符,但并不是在任何情况下输入Ctrl+D(linux之下,Windows下Ctrl+Z)都能够实现文件结束的功能,只有在下列的条件下,才作为文件结束符。
(1)遇到getcahr函数执行时,要输入第一个字符时就直接输入Ctrl+D,就可以跳出getchar(),去执行程序的其他部分;
(2)在前面输入的字符为换行符时,接着输入Ctrl+D;
(3)在前面有字符输入且不为换行符时,要连着输入两次Ctrl+D,这时第二次输入的Ctrl+D起到文件结束符的功能。
其实,这三种情况都可以总结为只有在getchar()提示新的一次输入时,直接输入Ctrl+D才相当于文件结束符。
2010-07-29 10:00
ggyy4k
Rank: 5Rank: 5
等 级:职业侠客
帖 子:111
专家分:334
注 册:2010-6-28
收藏
得分:3 
回复 楼主 diouf3
楼上几位把EOF说的很明白了,我来贴下函数声明的规则
函数调用规则如下:
1. 如果被调函数的返回值是整型或字符型时, 可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。
2. 非整型、字符型子函数需在主函数中声明,方可使用。
3. 当被调函数的函数定义出现在主调函数之前时, 在主调函数中也可以不对被调函数再作说明而直接调用。
4. 如在所有函数定义之前, 在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。
5. 对库函数的调用不需要再作说明, 但必须把该函数的头文件用include命令包含在源文件前部。
在楼主的程序中,swap()函数前面未说明返回值类型,编译器自动将它声明为整型,参考第一条规则,楼主的程序是可以通过的。
还可以做个试验,在楼主的程序中将swap()声明为long 型就不能通过编译了
2010-07-29 12:38
快速回复:函数声明的问题!高手解答下!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025456 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved