yohhoyの日記

技術的メモをしていきたい日記

2026-01-01から1年間の記事一覧

C/C++ char型のビット幅定義

C23/C++23現在のプログラミング言語仕様では、char型のビット幅CHAR_BITは8bit以上の処理系定義(implementation-defined)と規定される。POSIX規格では厳密にCHAR_BIT==8と定義する。 POSIX IEEE Std 1003.1, 2004, limits.hヘッダ仕様より一部引用。 Numeri…

-fassume-nothrow-exception-dtorオプション

LLVM/Clangでは「C++例外オブジェクトのデストラクタで例外送出しないと仮定する」コンパイルオプション-fassume-nothrow-exception-dtorが提供される。こんな邪悪な例外クラスを扱うユースケースは無いだろうが、C++言語仕様上は禁止されていない。 // デス…

冗長なtypenameキーワード

C++

プログラミング言語C++において型(type)名を記述するとき、C++11以降では修飾名(qualified name)に限って冗長なtypenameキーワードを記述しても良い。 #include <cstddef> using std::size_t; struct S { using type = int; }; typename int x0; // NG typename size_</cstddef>…

型パックからのインデクス指定

プログラミング言語C++において、テンプレートパラメータパック(template parameter pack)からインデクス指定で型(type)を選択する方法。C++2c(C++26)以降では直接的な記述が可能となる。 #include <tuple> // C++11 template <std::size_t Idx, typename... Ts> using Selector = typename std::tupl</std::size_t></tuple>…

unitbufマニピュレータ

C++

C++標準ライブラリのI/Oストリームにおける知名度の低いマニピュレータ(manipulator)。*1出力ストリームに対して出力操作毎のフラッシュ(flush)を指示する。*2 #include <iostream> int x = 42; std::cout << std::unitbuf; std::cout << "x=" << x << "\n"; // operat</iostream>…

"obsolescent feature" in 標準C

C

プログラミング言語C標準規格に登場する「廃止予定の機能(obsolescent feature)」の意味を正確に規定する提案が提出されている。 Motivation Mixing the terms "obsolete", "obsolescent", "deprecated", and "removed", despite distinctions in their mean…

fflush(NULL);

C

C標準ライブラリ関数fflushにヌルポインタを指定すると、プログラムが現在開いている全てのストリームをフラッシュする。 fflush(NULL); // OK C99 7.19.5.2/p1-3より引用(下線部は強調)。 #include <stdio.h> int fflush(FILE *stream); 2 If stream points to an </stdio.h>…

_Exit/_exitはストリームをフラッシュしない

C標準ライブラリ_Exit関数およびPOSIX準拠_exit関数は、プログラムを異常終了させるC標準abort関数と同様に開いているストリーム(FILE型)をフラッシュしない*1。ログファイルや標準出力(stdout)への出力欠落に注意。一方で、C標準ライブラリexit関数ではス…