如标题所示,当我尝试在Linux而不是Mac上进行编译时,出现以下错误:“函数'fileno'的隐式声明”。我知道我可以用简单的int fileno(FILE *stream);行修复它,但是我想知道为什么会这样。

最佳答案

您不应声明系统库提供的功能。您应该适当地包含适当的标题。

由于fileno不是标准的C函数,因此通常不在<stdio.h>中声明。您必须定义一个合适的宏才能启用声明。

man fileno



  glibc的要求(请参见feature_test_macros(7)):
  
  fileno():_ POSIX_C_SOURCE> = 1 || _XOPEN_SOURCE || _POSIX_SOURCE


在包含三个宏之前定义其中三个宏应该可以解决问题。

关于c - 当我尝试在Linux而不是Mac上进行编译时,为什么会出现“错误:函数'fileno'的隐式声明”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44622827/

10-09 16:23