syghの新フラグメント置き場

プログラミングTipsやコード断片の保管場所です。お絵描きもときどき載せます。

Java

絶対値関数absとオーバーフロー

C/C++において、符号付き整数の絶対値を求める関数abs(), labs(), llabs()および整数型のstd::abs()関数オーバーロードには罠があり、「整数オーバーフロー」が考慮されていません。 これは、JavaやC#のような近代的な言語と違って、C/C++の整数内部表現が2…

enumの読み方・発音はイニューム

ほとんどのプログラミング言語には列挙型 (enumeration type) あるいは列挙体 (enumeration) というデータ型があり、有限集合を順序付けて定義するのに使用します。C系の言語ではキーワードenumを使用します。 /* 軍艦の種類を表す列挙型 */ typedef enum My…

ログ用に時刻を取得して文字列化する (C#, Java, POSIX/Win32)

アプリケーションのデバッグや、デプロイ後の問題解析に最も重要な役割を果たすのはログです。ログの機能や精度・粒度によって、問題解決のしやすさがほぼすべて決まります。また、ログは単なるトラブルシューティングだけでなく、場合によってはユーザー操…

Android Javaのアサーション

昨年2018年は転職したこともあって、一番よく使った言語はJavaでした。とはいっても、ほとんどはAndroidのJavaであり、サーバーサイドやデスクトップで使われている正式なJavaとはいささか性質が異なります。JavaはC/C++やC#と違ってプリプロセッサをサポー…

volatileに関してそろそろ一言いっておくか

今更言うまでもありませんが、C/C++とJava/C#ではキーワードvolatileの意味が若干異なります。 C/C++ C/C++言語のvolatile修飾子は、コンパイラに副作用を示唆し、メモリアクセスの最適化を抑制するために存在します。volatileは典型的な処理系依存機能のう…