This question already has answers here:
implicit declaration using -std=c99
(4个答案)
3年前关闭。
在我的学校项目中,我们正在制作带有几个标记的复制程序。复制后,我需要截断一个文件。
这是它的代码:
GCC返回错误:'隐式声明函数'truncate'。
我有sys / types.h和unistd.h。
我正在编译标志:
-std = c99 -Wall -Werror
谢谢你的时间。
虽然同时需要
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
使用
(4个答案)
3年前关闭。
在我的学校项目中,我们正在制作带有几个标记的复制程序。复制后,我需要截断一个文件。
这是它的代码:
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
谢谢你的时间。
最佳答案
之所以会这样,是因为在尝试使用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);
虽然同时需要
#include
和unistd.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
使用
sys/types.h
将是获得这些的一种方法。关于c - GCC返回错误-'隐式声明函数'truncate',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40131142/
10-11 04:28