Namespaces
Variants

errno

From cppreference.net
ヘッダーで定義 <cerrno>
#define errno /* implementation-defined */

errno はエラー表示に使用されるプリプロセッサマクロです。これは static (until C++11) thread-local (since C++11) 型の変更可能な左辺値に展開されます。 int

いくつかの標準ライブラリ関数は、正の整数を errno に書き込むことでエラーを通知します。一般的に、 errno の値は、 <cerrno> に列挙されているマクロ定数のいずれかに設定されます。これらのエラーコードは、文字 E で始まり、大文字または数字が続く形式を持ちます。

プログラム起動時には 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 に表示する
(関数)
指定されたエラーコードのテキスト版を返す
(関数)