errno
From cppreference.com
| ヘッダー <cerrno> で定義 |
||
| #define errno /* 実装定義 */ |
||
errno は、エラーを示すために使用されるプリプロセッサマクロです。これは、int 型の静的(C++11まで)スレッドローカルな(C++11以降)変更可能な左辺値に展開されます。
いくつかの標準ライブラリ関数は、正の整数を errno に書き込むことでエラーを示します。errno の値は通常、文字 E とそれに続く大文字または数字で始まるマクロ定数として <cerrno> にリストされているエラーコードのいずれかに設定されます。
プログラム開始時、errno の値は 0 であり、ライブラリ関数はエラーが発生したかどうかにかかわらず正の整数を errno に書き込むことが許可されていますが、ライブラリ関数は 0 を errno に格納することはありません。
[編集] 例
このコードを実行
#include <cerrno> #include <clocale> #include <cmath> #include <cstring> #include <iostream> int main() { const double not_a_number = std::log(-1.0); std::cout << not_a_number << '\n'; 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'; } }
実行結果の例
nan log(-1) failed: Numerical argument out of domain Or, in German, Das numerische Argument ist ausserhalb des Definitionsbereiches
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 310 | C++98 | errno がマクロなのか それとも外部リンケージを持つ識別子なのかが不明確だった |
errno は マクロでなければならない |
[編集] 関連項目
| 標準的なPOSIX互換のエラー条件のためのマクロ (マクロ定数) | |
| 現在のエラーに対応する文字列を stderr に表示する (関数) | |
| 与えられたエラーコードのテキスト版を返す (関数) | |
| errno のCドキュメント
| |