yohhoyの日記

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

2022-09-01から1ヶ月間の記事一覧

オーバーロード関数とテンプレート引数推論

C++

プログラミング言語C++において、オーバーロードされた関数群をテンプレートパラメータへ引き渡す方法。テンプレート引数の関数型を一意に推論できないため、ジェネリックラムダ式でラップする必要がある。テンプレート引数Fはラムダ式に対応する固有のクロ…

R.I.P. "= {0}"

プログラミング言語Cの次期C2x(C23)言語仕様では、空のブレース{}を用いた配列・構造体の初期化が許容される。C++では当初からOK。 typedef struct S { int m1, m2; } S; // C17:ill-formed / C2x:OK / C++:OK int arr0[10] = {}; S obj0 = {}; // C:OK / C+…

#embedディレクティブ

プログラミング言語Cの次期C2x(C23)言語仕様に追加される#embedディレクティブについて。外部ファイルをバイナリデータとしてプログラムに埋込む機能。下記コードは、外部PNGファイル内容を生成プログラム中のuint8_t型配列として埋め込む例*1 *2。C17現在は…

typeof演算子 in 標準C

プログラミング言語Cの次期仕様C2x(C23)では、式から型情報を取り出す typeof演算子(typeof operator) が追加される。 // C2x const int x = /*...*/; typeof(x) y; // const int型 typeof_unqual(x) z; // int型 int func(int); typeof(func)* pf; // int(*…

reproducible/unsequenced属性

プログラミング言語Cの次期C2x(C23)言語仕様に追加される属性(→id:yohhoy:20200505)reproducible, unsequencedに関するメモ。関数呼び出しに対する最適化ヒント。 // C2x int calc(int x, int y) [[unsequenced]]; int a = /*...*/; int b = calc(a) * 2; …

nullptr定数 in 標準C

C C2x

プログラミング言語Cの次期仕様C2x(C23)にて、ついにC言語にも真のヌルポインタ定数nullptrがやってくる。 C++11(→id:yohhoy:20120503)から遅れること12年。 int *p1 = nullptr; // C2x以降 int *p2 = NULL; int *p3 = 0; まとめ: C/C++両言語のnullptrが…

改行コード(CR/LF)と改行文字と標準C

C

プログラミング言語C標準規格における改行文字(new-line character)と改行コードCR, LFとの関係性について。まとめ: C標準規格ではプログラム内部で扱う「改行文字」と、外部ファイルにおける具体的なCR, LF等の「文字コード」を区別する。*1 *2 改行文字を…