最終更新日時: 2026年06月15日 14時22分22秒 (JST)
Akira Takahashi が更新

履歴 編集

macro
<cstdio>

# _PRINTF_NAN_LEN_MAX(C++26)

    #define _PRINTF_NAN_LEN_MAX implementation-defined

## 概要

`printf`系関数がNaN (非数) を出力する際に生成しうる、最大の文字数を表す整数定数。

`%f`・`%e`・`%g`などの浮動小数点変換でNaNを出力する場合、処理系は`nan`や`nan(n-char-sequence)`形式の文字列を生成する。このマクロは、その文字列の最大長を表す。出力先バッファのサイズを決定する際に利用できる。

C23で`<stdio.h>`に追加されたマクロであり、C++26で`<cstdio>`に取り込まれた。

## 備考

- 規格上、値は`3`以上であることが規定されている

## 例

    #include <cstdio>
    #include <cmath>

    int main()
    {
      // NaNを出力するのに十分なバッファを確保する
      char buf[_PRINTF_NAN_LEN_MAX + 1];

      std::snprintf(buf, sizeof(buf), "%f", NAN);
      std::printf("%s\n", buf);
    }

### 出力例

    nan

## バージョン

### 言語

- C++26

### 処理系

- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌

## 参照

- P3348R4 C++26 should refer to C23 not C17
  - C++26がC23を参照するようになり、このマクロが`<cstdio>`に追加された