errno
提供: cppreference.com
ヘッダ <cerrno> で定義 | ||
#define errno /*implementation-defined*/ | ||
errno
はエラーを示すためのプリプロセッサマクロです。 int 型の static(C++11未満) スレッドローカル(C++11以上)な可変左辺値に展開されます。
いくつかの標準ライブラリ関数は、 errno
に正の値を書き込むことによってエラーを示します。 一般的には、 errno
の値は、 E
で始まり大文字または数字が続くマクロ定数として <cerrno>
に掲載されている、エラーコードのいずれかに設定されます。
プログラム開始時の errno
の値は 0 です。 ライブラリ関数は、エラーが発生したかどうかにかかわらず、正の値を errno
に書き込むことが許されています。 ライブラリ関数が errno
に 0 を格納することはありません。
[編集]例
Run this code
#include <iostream>#include <cmath>#include <cerrno>#include <cstring>#include <clocale> int main(){double not_a_number =std::log(-1.0);if(errno==EDOM){std::cout<<"log(-1) failed: "<<std::strerror(errno)<<'\n';std::setlocale(LC_MESSAGES, "de_DE.utf8");std::cout<<"Or, in German, "<<std::strerror(errno)<<'\n';}}
出力例:
log(-1) failed: Numerical argument out of domain Or, in German, Das numerische Argument ist ausserhalb des Definitionsbereiches
[編集]欠陥報告
以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。
DR | 適用先 | 発行時の動作 | 正しい動作 |
---|---|---|---|
LWG 310 | C++98 | it is unspecified whether errno is a macro or an identifier with external linkage | errno must be macro |
[編集]関連項目
標準の POSIX 互換のエラー状況のためのマクロ (マクロ定数) | |
現在のエラーに対応する文字列を stderr に出力します (関数) | |
指定されたエラーコードのテキストバージョンを返します (関数) | |
errno の C言語リファレンス |