论坛: 编程破解 标题: c语言函数声明问题[已知,谢谢] 复制本贴地址    
作者: kert_t8 [kert_t8]    论坛用户   登录
代码:

#include<stdio.h>

int main(int argc, char *argv[]) {
        FILE *dispFileName;
        if ((dispFileName=fopen(argv[1],"r"))==NULL) {
                printf("Sorry, Can't open this file");
                exit(1);
        }
        dispFile(dispFileName);
}

int dispFile(FILE *dispFileName) {
        char fileTxt = fgetc(dispFileName);
        while(fileTxt!=EOF) {
                fileTxt=fgetc(dispFileName);
                putchar(fileTxt);
        }
        return 1;
}



代码:

#include<stdio.h>

int main(int argc, char *argv[]) {
        FILE *dispFileName;
        if ((dispFileName=fopen(argv[1],"r"))==NULL) {
                printf("Sorry, Can't open this file");
                exit(1);
        }
        dispFile(dispFileName);
}

void dispFile(FILE *dispFileName) {
        char fileTxt = fgetc(dispFileName);
        while(fileTxt!=EOF) {
                fileTxt=fgetc(dispFileName);
                putchar(fileTxt);
        }
}



我觉得两段代码都对,但是为什么运行第二段代码的时候会报错
引用:

type.c:12: error: conflicting types for 'dispFile'
type.c:9: error: previous implicit declaration of 'dispFile' was here



我怀疑dispFile是不是一个已经定义过的函数了,但是我觉得不是啊!包括我到置顶帖子里面提供的函数库里面查都没有找到dispFile这个函数啊!怪


[此贴被 月之御者(kert_t8) 在 01月14日07时33分 编辑过]

地主 发表时间: 05-01-13 08:48

回复: wkbsb [wkbsb]   论坛用户   登录
你要在前面定义dispFile函数的原形。


B1层 发表时间: 05-01-13 14:16

回复: kert_t8 [kert_t8]   论坛用户   登录

但是第一个为什么就可以编译通过呢?


[此贴被 月之御者(kert_t8) 在 01月13日15时24分 编辑过]

B2层 发表时间: 05-01-13 14:46

回复: kert_t8 [kert_t8]   论坛用户   登录
基本明白了一些,谢谢霜泉,呵呵

B3层 发表时间: 05-01-13 15:32

回复: kert_t8 [kert_t8]   论坛用户   登录
还有一楼的

B4层 发表时间: 05-01-13 15:33

回复: ljsh012 [ljsh012]   论坛用户   登录
正如你所言。
刚刚我说的错了。
第一个程序最后在执行dispFile时,返回了1。给main函数,程序没有报错。
后来仅仅是没有返回值给main,就报错。赫赫。还真向你所言,dispFile难道不支持文件指针类型。迷糊了。

B5层 发表时间: 05-01-13 15:36

回复: ljsh012 [ljsh012]   论坛用户   登录
你照一楼的在把dispFile函数置前看看。
因为第二个程序确实不符合。按理他找不到dispFile函数的。
第一个通过了。估计是返回了1 的缘故。

B6层 发表时间: 05-01-13 15:39

回复: 286 [unique]   版主   登录
把第二个程序dispFile前面的void去掉就行了。
否则被认为是重新声明了。

其实如果你在main()前声明所有main()后面要用的函数就不会有此问题。

另外,不要在此处深究,没太大意思。出现这种现象可能与编译器有关。不同编译器可能不一样。换一个,也许就没这个问题了。

B7层 发表时间: 05-01-13 18:19

回复: kert_t8 [kert_t8]   论坛用户   登录
明白了,问题跟文件操作无关
需要使用void的地方只要什么都不写就void了,呵呵

好的编程习惯是在定义使用函数之前声明,286说得对

谢谢大家

B8层 发表时间: 05-01-14 07:32

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号