This question already has answers here:
implicit declaration using -std=c99
                                
                                    (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);



虽然同时需要#includeunistd.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