GCC返回错误 - '隐式声明函数'truncate''

时间:2016-10-19 12:15:00

标签: c gcc

在我的学校项目中,我们正在制作带有几个标志的复制程序。我需要在复制后截断一个infile。 这是它的代码:

int a_trunc(const char* infile, const char* size){
    int s = strtol(size, NULL, 10);
    truncate(infile, s);
    return 0;
}

GCC返回错误:'隐式声明函数'truncate''。

我有sys / types.h和unistd.h。

我正在使用标志进行编译:     -std = c99 -Wall -Werror

感谢您的时间。

1 个答案:

答案 0 :(得分:-1)

您之所以这样,是因为在您尝试使用原型之前未使用原型声明truncate()

the man page

  

<强>概要

   #include <unistd.h>
   #include <sys/types.h>

   int truncate(const char *path, off_t length);
   int ftruncate(int fd, off_t length);

虽然#includeunistd.hsys/types.h,但这还不够。 GCC / Linux还需要特定的功能宏定义:

  

glibc的功能测试宏要求(参见feature_test_macros(7)):

   truncate():
       _XOPEN_SOURCE >= 500
           || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
           || /* Glibc versions <= 2.19: */ _BSD_SOURCE

   ftruncate():
       _XOPEN_SOURCE >= 500
           || /* Since glibc 2.3.5: */ _POSIX_C_SOURCE >= 200112L
           || /* Glibc versions <= 2.19: */ _BSD_SOURCE

使用-std=c99是获取这些内容的一种方式。