【问题标题】:mkstemp implicit declaration of functionmkstemp 函数的隐式声明
【发布时间】:2014-07-15 12:19:05
【问题描述】:

我对函数mkstemp() 有疑问。 cygwin 上的 GCC 编译器生成警告:

implicit declaration of function ‘mkstemp‘

GCC 标志:-std=c99 -Wall

包括:

#include </usr/include/stdlib.h>
#include </usr/include/unistd.h>

【问题讨论】:

  • 来自手册页:#include 为什么将编译器误导到特定路径?
  • 是的,硬编码路径是一个非常糟糕的主意。

标签: c cygwin mkstemp


【解决方案1】:

在我的cygwin stdlib.h 中,mkstemp 声明像这样受到保护:

#ifndef __STRICT_ANSI__
#ifndef _REENT_ONLY
int _EXFUN(mkstemp,(char *));
#endif

好像mkstemp 不是ANSI C。确保您没有将编译器设置为强制执行特定标准(放弃c99)并且不要使用-ansi/-pedantic 标志。

另外...在您的#includes 中删除/usr/include/ 部分。编译器会为您处理这些。

【讨论】:

  • 我想强制执行标准 c99,因为“'for' 循环初始声明只允许在 C99 模式下”
  • 您可以使用 -std=gnu99 代替(但要注意:这会导致编译器中出现一些不符合要求的行为,包括某些浮点损坏)或 -U__STRICT_ANSI__ 在保留 C99 的同时省略 __STRICT_ANSI__ 宏功能。
猜你喜欢
  • 2021-01-20
  • 1970-01-01
  • 2014-06-28
  • 2022-01-16
  • 2011-10-05
  • 2013-10-28
  • 2019-07-16
  • 2017-07-16
相关资源
最近更新 更多