编译错误 error: implicit declaration of function ‘getopt’ [-Werror=implicit-function-declaration] 解决方法

这篇具有很好参考价值的文章主要介绍了编译错误 error: implicit declaration of function ‘getopt’ [-Werror=implicit-function-declaration] 解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景/需求

编译错误:
error: implicit declaration of function ‘getopt’ [-Werror=implicit-function-declaration]

解释

在某些C标准中,要求函数必须在调用前具有显示声明,例:

void function_a(); //函数声明

int main(){
	function_a();//函数调用
}
void function_a(){
	//函数实现或者叫函数定义
}

若在调用前没有显示声明,则报编译错误,例:

//void function_a(); //函数声明

int main(){
	function_a();//函数调用
}
void function_a(){
	//函数实现或者叫函数定义
}

使用getopt方法时,需要先#include <utistd.h>utistd.h中又进行了#include<getopt.h>的包含,因此,最终getopt函数的声明存在于getopt.h文件中,查看该文件:

  1. cd /usr/include/
  2. vim getopt.h
  3. 注意中间这部分代码:
...
...
#ifdef __GNU_LIBRARY__
/* Many other libraries have conflicting prototypes for getopt, with
   differences in the consts, in stdlib.h.  To avoid compilation
   errors, only prototype getopt for the GNU C library.  */
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
       __THROW;

# if defined __need_getopt && defined __USE_POSIX2 \
  && !defined __USE_POSIX_IMPLICITLY && !defined __USE_GNU
/* The GNU getopt has more functionality than the standard version.  The
   additional functionality can be disable at runtime.  This redirection
   helps to also do this at runtime.  */
#  ifdef __REDIRECT
  extern int __REDIRECT_NTH (getopt, (int ___argc, char *const *___argv,
                                      const char *__shortopts),
                             __posix_getopt);
#  else
extern int __posix_getopt (int ___argc, char *const *___argv,
                           const char *__shortopts) __THROW;
#   define getopt __posix_getopt
#  endif
# endif
#else /* not __GNU_LIBRARY__ */
extern int getopt ();
#endif /* __GNU_LIBRARY__ */
...
...

分析可知,只有定义了__GNU_LIBRARY__才可以使用int getopt (int ___argc, char *const *___argv, const char *__shortopts) __THROW;这个函数声明

解决方法

目前我在编译时添加了选项:-std=gnu99而不是-std=c99,实测通过了编译。文章来源地址https://www.toymoban.com/news/detail-573864.html

到了这里,关于编译错误 error: implicit declaration of function ‘getopt’ [-Werror=implicit-function-declaration] 解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包