在我的学校项目中,我们正在制作带有几个标志的复制程序。我需要在复制后截断一个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
感谢您的时间。
答案 0 :(得分:-1)
您之所以这样,是因为在您尝试使用原型之前未使用原型声明truncate()
。
<强>概要强>
#include <unistd.h> #include <sys/types.h> int truncate(const char *path, off_t length); int ftruncate(int fd, off_t length);
虽然#include
和unistd.h
都sys/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
是获取这些内容的一种方式。