0

我有一个过去编译成功的程序,但现在我得到一堆错误。源代码只是:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>

int main()
{
    int fd;
    fd = creat("datafile.dat", S_IREAD | S_IWRITE);
    if (fd == -1)
        printf("Error in opening datafile.dat\n");
    else
    {
        printf("datafile.dat opened for read/write access\n");
        printf("datafile.dat is currently empty\n");
    }
    close(fd);
    exit (0);
}

现在我得到错误:

cre.C:8:54: error: ‘creat’ was not declared in this scope
cre.C:16:17: error: ‘close’ was not declared in this scope
cre.C:17:16: error: ‘exit’ was not declared in this scope

有时我得到一个错误gxx_personality_v0,有时我根本没有错误!我已经尝试更新gcc,但问题仍然存在。怎么了?vaio 笔记本电脑上的操作系统 UBUNTU 12.1

4

2 回答 2

5

从您的错误消息中,我看到您调用了您的文件cre.C。gcc 对文件名区分大小写:尝试命名cre.c并编译它。

$ LANG=C cc -o foo foo.C
foo.C: In function 'int main()':
foo.C:8:54: error: 'creat' was not declared in this scope
foo.C:16:17: error: 'close' was not declared in this scope
foo.C:17:16: error: 'exit' was not declared in this scope

$ LANG=C cc -o foo foo.c
foo.c: In function 'main':
foo.c:17:9: warning: incompatible implicit declaration of built-in function 'exit' [enabled by default]

如评论中所述,带有.C扩展名的文件由 C++ 编译器处理,因此您会看到这些错误。

于 2013-04-29T18:55:50.973 回答
-1

阅读 、 和 函数的creat手册closeexit

在我的系统上,creat()需要:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

close()要求:

#include <unistd.h>

exit()要求:

#include <stdlib.h>

至于为什么之前要编译代码,很难说。也许编译器是在一种更宽松的模式下被调用的,它不会抱怨缺少函数声明,或者你确实包含的一些头文件有#include你需要的头文件的指令。

于 2013-04-29T23:33:47.750 回答