'errno`声明时的编译时错误

时间:2013-10-17 03:14:48

标签: c++ linux

在Linux上编译我的C ++程序的过程中,它会发出以下警告:

warning #584: omission of exception specification is incompatible with previous function "__errno_location" (declared at line 43 of "/usr/include/bits/errno.h")
extern int errno;//error handling
         ^

代码如下所示:

#include <errno.h>    //for error handling
#include <cmath>
#include <cstring>
#include <ctime>

extern int errno;//error handling

errno是全局变量,用于其他.cpp文件。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:9)

errno必须是“可修改的左值”,不一定是声明的对象。

显然,在您的实现中,errno会扩展为包含对名为__errno_location的函数的调用的表达式。

在你自己的宣言中:

extern int errno;

errno扩展为该表达式,从而导致错误。

由于<errno.h> 已经为您宣布errno,因此无需自行声明,并且正如您所见,您无法自己声明。

只需省略extern声明。