【发布时间】:2017-11-28 15:20:55
【问题描述】:
我正在使用 C++ 进行一些系统编程,我想将 linux 系统中的 errno 变量传递给我的异常处理程序。您可以在此处查看示例代码 https://pastebin.com/ppgMc8Hj
#include <sys/stat.h>
#include <cerrno>
#include <iostream>
#include <cstring>
std::string errorString(int errno){
return std::strerror(errno);
}
int main(){
struct stat sb;
errno = 0;
if(stat("/jdfj/", &sb)){
errorString(errno);
}
else{
std::cout << std::boolalpha << S_ISDIR(sb.st_mode) << std::endl;
}
}
但它会返回这样的错误
In function 'int main()':
14:26: error: invalid conversion from 'int' to 'int* (*)()' [-fpermissive]
6:13: note: initializing argument 1 of 'std::string errorString(int* (*)())'.
我在这里看到http://en.cppreference.com/w/cpp/string/byte/strerror 从 errno 返回字符串的标准函数接受一个 int 作为参数。 我的问题是
- 如果是 int 类型为什么不能在上面的代码中工作?
- 如果不是,它是什么类型?
【问题讨论】:
-
即使是最随意的搜索也显示“errno 是用于...的预处理器宏”