このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

その他プログラミング

関数オブジェクト

関数を関数に渡す - 檜山正幸のキマイラ飼育記 メモ編 簡単な用途なら、大域関数または静的メンバー関数をポンッと渡すのが気楽でいいような気がしてきた。関数を受け取る側で型制約をしておけば、まーまー安全だろう。インターフェイスによる制約と差はない…

#pragma pack(n)

https://gcc.gnu.org/onlinedocs/gcc-4.8.4/gcc/Structure-Packing-Pragmas.html For compatibility with Microsoft Windows compilers, GCC supports a set of #pragma directives that change the maximum alignment of members of structures (other than…

ダウンキャスト再論

次のような状況: ダウンキャストを使う。 static_castでもまず問題はない。 だが、人間は間違う。万が一の間違いは検出したい。 それで、開発中にはdynamic_castを使って、最終的にはstatic_castにすることに。開発中(デバッグモード)かリリースかは、C/C…

関数を関数に渡す

関数ポインタ型の変数 - 檜山正幸のキマイラ飼育記 メモ編の続き。 #include <stdio.h> #include <string> typedef void (*Greeter)(const std::string&); void doGreet(Greeter greet) { greet("world"); } void hello(const std::string& toWhom) { printf("Hello, %s\n", t</string></stdio.h>…

関数ポインタ型の変数

C/C++での配列の名前 - 檜山正幸のキマイラ飼育記 メモ編 : C/C++を使う機会は一生ないと思っていたな。使ったのは、もうナン十年も前だし。ほぼ初心者に戻ったわ。 あーー、忘れた。順番に思い出そう。関数ポインタを入れる変数の宣言構文とか、あれは忘れ…

C/C++での配列の名前

C/C++を使う機会は一生ないと思っていたな。使ったのは、もうナン十年も前だし。ほぼ初心者に戻ったわ。配列の名前、あれはほんとに名前だよな。アドレス値を保持している定数、*(array + 3) って array[3] だったような。サンプル作って確認した。 #include <stdio.h></stdio.h>…

C++の本

以下のなかで、青い『STL』と『C++オブジェクトデザイン』は移動している。『大規模C++ソフトウェアデザイン』と『C++再考』も持ち出している。ここらへんは、C++本がせっかくまとまっているから、この配置を崩さないように戻したほうがいいと思う。

生キャストを使ってしまうところ、望ましい方法

C++でのキャスト - 檜山正幸のキマイラ飼育記 メモ編にて: Cの生のキャストは、構文が (DerivedConcrete *) だから、grepにひっからないのが困る。当然に安全性はないし。しかし、最近も「まーいいや」と使った気がする。イカンイカン。 探してもみつからな…

C++でのキャスト

何かしらbasicでabstractなクラスBasicAbstracがあったとして、これの派生クラスDerivedConcreteもあるとする。p がBasicAbstractなインスタンスへのポインタ(参照でも)とする。一般的抽象的なレベルでは、BasicAbstractなpで作業すれば十分、という状況。…

わかった、string.hの謎

stricmp問題 - 檜山正幸のキマイラ飼育記 メモ編 の件。共通インクルードファイルのなかで、#include されていた。このため、共通インクルードファイルを直接・間接にインクルードしているファイル(すべてのソースファイル)で、 #include "common.h" // 間…

stricmp問題

<string.h>をインクルードしても、sricmp関数が使えない(見えない)。知らなかったが、ANSIではstricmp, strcmpi関数は廃止されたようだ。次のように __STRICT_ANSI__ 定数を無効化してからインクルードするとstricmpが宣言される。 #ifdef __STRICT_ANSI__ #undef __</string.h>…

GetCurrentTime問題

https://msdn.microsoft.com/ja-jp/library/cc429748.aspx : GetCurrentTimeこの関数は使われなくなりました。Win32 アプリケーションでは、GetTickCount 関数、または、レジストリの HKEY_PERFORMANCE_DATA 内にあるカウンタを使ってください。ただし、過去…

ヘッダーファイルの在り処

MSVC /c/Program Files (x86)/Microsoft SDKs/Windows/v7.{0,1}A/Include/ 古いGCC /c/Installed/MinGW/include/ TDM-GCC /c/Installed/TDM-GCC-64/x86_64-w64-mingw32/include/ [追記]gccのパス違った。もっと優先されるパスがある。g++ -v でコンパイルす…

MSVCとgcc新旧のtime

まずはMSVC2010: #include <time.h> #include <stdio.h> int _tmain(int argc, _TCHAR* argv[]) { printf("sizeof(int):%d\n", sizeof(int)); printf("sizeof(long):%d\n", sizeof(long)); printf("sizeof(time_t):%d\n", sizeof(time_t)); return 0; } sizeof(int):4 sizeof</stdio.h></time.h>…

throw()とnoexcept

C++で、 throw() 古い noexcept 新しい noexceptは、無例外保証の指定構文。当たり前だが例外について記述してるんではない。

エンコーディング変換のWindows API

https://msdn.microsoft.com/ja-jp/library/cc448053.aspx https://msdn.microsoft.com/ja-jp/library/cc448089.aspx [追記]詳しいことをシフトJIS文字列とユニコード文字列の変換のときの終端ヌルとかバッファ長とか - 檜山正幸のキマイラ飼育記に書いた。[…

gccでWindows API

MinGWのgccはWindows.hを備えているので、 #include <Windows.h> #pragma comment(lib, "shlwapi.lib") とかできる。Win32 APIを呼ぶことができる。PowerShellコマンドを真似たヤツ。 bool testPath(const string &path, bool container) { if (container) { return (bo</windows.h>…

C++コンパイラの状況

// newfeaturs.cpp #include "stdafx.h" // MSC用 // 静的アサート static_assert(sizeof(unsigned short int) == 2, "ushort must have size 2."); // ヌルポインタ void *p = nullptr; // 自動型付け auto a = 0.5f; decltype(a) b = a; auto auto_func(in…

WindowsのUnicode事情

だいぶ前からOS内部は完全にUnicode化されている。 OSの内部コードはUTF-816リトルエンディアンらしい(https://ja.wikipedia.org/wiki/UTF-16) 表面的にはシフトJISも使われている。ユーザーからはシフトJISが見えている。 Unicode文字をワイド文字と呼ぶ…

C++のコンストラクタ

コンストラクタから他のコンストラクタを呼ぶ時は、呼び方に注意。後で調べてまとめる。 コンストラクタの本体に入る前の初期化子を使うのが良い。が、丸括弧か波括弧かで悩む。

ステパノフ理論:コンセプト

「ステパノフ理論:」で始まるタイトルは、その話です。ステパノフの言う「コンセプト」とは、だいたいは型クラスだと思う。コンセプトの実装はないので、説明用のメタ記述は擬似言語を使っているんだが、それがギゴチないつうか、気持ち悪いつうか、どうも…

ステパノフ理論:正則型

STLのステパノフが『プログラミング原論』という変な本を書いている。昔から持っていたが読んでなかった、変だから。少し読もうかと思った。『原論』の内容をステパノフ理論と呼ぶことにする。正則型(regular type)とは、 計算可能で全域な等号述語を持っ…

MSVC Community と tdm-gcc

コマンドラインからC++使用のために。発端は: Mingw-w64/MSYS2 を入れなくても Git for Windows で間に合うみたい - 檜山正幸のキマイラ飼育記 MSVC Community https://www.visualstudio.com/products/visual-studio-community-vs インストール場所: C:\Pr…

UCS-2

歴史的には、UCS2は昔のUnicodeコンソーシアム起源、UCS-4は昔の(しかし少し後の)ISO-10646起源だろう。この頃(今でもだが)文字番号と符号化(ビットエンコーディング)の区別は厳密ではなくて、番号付けにビット表現も一緒に想定してたと思える。したが…

bashの変数

※関数と変数と別名は、名前空間が別スコープ 局所変数 大域変数 環境変数 アクセス 書き込み可能 書き込み不可能(readonly, immutable) システムorユーザー 特殊パラメータ システム使用の変数(IFSなど) ユーザー変数 エクスポート エクスポート変数 内…

bashの関数

引数の型付け: 関数の入り口で、local オプション 名前=初期値 とする。 戻り情報:ステータス(終了コード $?)、標準出力(ハンドル1番)、エラー出力(ハンドル2番)、出力引数(参照=名前をもらう)、結果大域変数 可変引数、残余引数 in TypeScript (…

ミニミニLisp構文

ブラケット内は先読みの対象となるトークン。 expr-sequence ::= expr* EOF expr ::= [Atom] | ['('] list | ["'"] quoted list ::= expr* ')' quoted ::= [Atom] | ['('] list トークンは、 Atom = [-+._a-zA-Z0-9]+ RPar '(' LPar ')' Quote "'" これだけ。

bashの素晴らしきワロサ

ワロサは、「いとわろし」のワロサ=悪さと、ワロス=笑える/笑かしてくれるの両方の意味。bashは古い言語の悪しき特徴を満遍なく現代に受け継いでいる。 汚い変数構文 ブロックスコープがない。 それなのに、呼び出し階層による入れ子スコープ 動的なくせ…

bashの何が最悪なのか

不合理な構文: ${!…} は、「困ったらとりあえずビックリ」という方針な気がする。 トークンと式と文とデータ(リテラル)の区別が曖昧。 式の評価方式がハッキリしない。 式の値=データもハッキリしない。 データの実際の値をインスペクトするのが困難 状…

bashの配列と連想配列の存在確認

不確実で変な方法がいくつかあるが、確実と思えるのは次だけのようだ。 declare -p ass 2> /dev/nul 1> /dev/null; echo $? (&> dev/null が使える) declareがエラーを返すときは、その名前は未定義。それにしても、こんな方法しかないとすると、設計が間…