yohhoyの日記

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

C2y

名前付きループ in 標準C

C C2y

プログラミング言語Cの次期標準C2yでは、名前付きループ(Named Loop)構文としてbreak/continue文へのラベル指定がサポートされる。 // C2y outer: for (int i = 0; i < N; ++i) { for (int j = 0; j < M; ++j) { break; // 内部ループ脱出: 1)へ break oute…

8進数リテラルプレフィクス in 標準C

プログラミング言語Cの次期標準C2yでは、8進数リテラルプレフィクス0o/0Oが導入される。 // C2y int n1 = 0o52; // 42 int n2 = 0O52; // 42 int n0 = 052; // 42 (従来記法; 廃止予定) 0o/0Oプレフィクス追加と同時に、数値0のみプレフィクスとする従来8…

16進文字から数値への変換: ch - 'a' + 10

C C2y

プログラミング言語Cの次期仕様C2yでは、16進数表記で用いられるアルファベット文字範囲'a'~'f'および'A'~'F'について文字コードの連続性保証が明文化される。この文字コード範囲での連続性保証は、ラテンアルファベット26文字 A~Z / a~z が連続配置され…

配列添字演算子の小さな改善案 for C2y

C2y

プログラミング言語Cにおける配列添字演算子(array subscript operator)[]の伝統的かつ奇妙な言語仕様に関して、次期C2yをターゲットとした仕様修正が提案されている。小ネタ以外の使い道もなく修正されて良い頃合いかもね?*1 const char msg[] = "Hello"; …

インクリメント on 複素数

プログラミング言語Cの次期仕様C2yでは、複素数型(_Complex float/double/long double)に対するインクリメント/デクリメントが正式サポートされる。gcc/Clangでは独自拡張としてサポート済み。 _Complex double c = 41.; ++c; // OK: C2y assert(c == 42.);…

厳格な式の評価順序 for C2y

C2y

プログラミング言語Cの次期仕様C2yに向けて、式の評価順序を厳格に規定する提案 N3203 Strict order of expression evaluation が提出されている。チャレンジングなお話。C言語(C++も同様)では歴史的経緯から、演算子オペランドの評価順*1や関数実引数リス…

NULL-NULL=?

C/C++言語におけるヌルポインタ同士の減算に関するメモ。 int *p = NULL, *q = NULL; ptrdiff_t x = (p - q); // x == 0 ? まとめ: C言語仕様上は未定義動作(undefined behavior)。とはいえ、大半の処理系では値0になると予測される(単に経験則)。 2024-1…