小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


C++

ファイルハンドルからファイル名などの情報を取得したい

C++

はじめに VC++でファイルハンドルからファイル名などのファイル情報を取り出したい。たとえば、CloseHandleのラッパー関数があって、すべての呼び出し元はこのラッパー関数を使っていたとします。ラッパー関数内でファイルハンドルからファイル情報を取得で…

Visual Studio 2015(VC++)でQRコードを生成する

c++

photo credit: Radar Dish QR Code via photopin (license) はじめに Visual Studio 2015(VC++)でQRコードを生成する方法を記載しています。 環境 Windows 7 Pro 32bit Visual Studio 2015 QRコード生成ライブラリ http://www.psytec.co.jp/freesoft/03/ 準…

【cppcheck】warning: Either the condition 'x' is redundant or there is possible null pointer dereference

c++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 warning: Either the condition 'x' is redundant or there is possible null pointer dereference. cppcheckのバージョン v1.73 サンプル…

【cppcheck】error: Deallocating a deallocated pointer: xxx

c++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 error: Deallocating a deallocated pointer: xxx cppcheckのバージョン v1.72 サンプルプログラム 以下のソースプログラムを解析にかける…

SonarQubeでC++コードを静的解析してみる

C++

はじめに SonarQubeでC++コードを静的解析してみました。 SonarQubeについては以下の記事をご欄ください。 SonarQubeでプログラムの品質管理をはじめる(概要) - Qiita ブログズミ: SonarQube で C++ のコードを解析してみた バージョン SonarQube 5.2 Sona…

【VS2015】コマンドラインからcl.exeのコード分析(/analyze)を利用する

C++

はじめに Visual Studioのコード分析機能を使って、ソースコードの静的解析を行うことができます。 GUIから実行すると複数のソースコードを一度に分析にかけずらいので、コマンドラインから実行できないかと考えました。 環境 Windows 8.1 Ent(32bit) Visual…

C言語で平日と土日を判定する

C++

はじめに C言語で平日と土日を判定するには、tm_wdayで曜日を表す数値を取り出し、土曜と日曜を平日以外と判定します。 このプログラムは、祝祭日には対応していません。 土日判定プログラム t.tm_wdayを判定して、日曜(0)と土曜(6)はtrueを返します。 bool …

Visual Studio 2013でリファクタリングを行う方法

C++

はじめに Visual Studio Community 2013でC++のソースプログラムのリファクタリング(名前変更)を行う方法について書いています。Microsoft Visual Studio Professional 2013 通常版posted with amazlet at 15.05.30マイクロソフト (2013-11-29)売り上げラ…

【cppcheck】error: Common realloc mistake: 'tmp' nulled but not freed upon failure

c++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 error: Common realloc mistake: 'tmp' nulled but not freed upon failure サンプルプログラム #include "stdafx.h" #include <Windows.h> int _tmain</windows.h>…

C6308 Reallocのリーク

C++

はじめに 以下のプログラムをコード解析にかけると、C6308 Reallocのリークという警告が出力されます。 C6308 Realloc のリーク 'realloc' は null ポインターを返す可能性があります: null ポインターを、引数として 'realloc' へ渡された 'tmp' に割り当て…

コマンドラインからcl.exeのコード分析(/analyze)を利用する

C++

はじめに Visual Studioのコード分析機能を使って、ソースコードの静的解析を行うことができます。 GUIから実行すると複数のソースコードを一度に分析にかけずらいので、コマンドラインから実行できないかと考えました。 環境 Windows 7 Pro(32bit) Visual S…

【VC++】GetLastError()のコードからエラーメッセージを取得する

C++

はじめに GetLastError()のコードからエラーメッセージを取得するサンプルプログラムです。 GetLastError()のコードからエラーメッセージを取得する #include "stdafx.h" #include <Windows.h> int _tmain(int argc, _TCHAR* argv[]) { LPTSTR lpMessageBuffer = NULL; </windows.h>…

VC++で作るマルチスレッドと排他制御のサンプルプログラム

はじめに VC++でマルチスレッドプログラミングのサンプルコードを書いてみました。 以下のページに書かれているサンプルプログラムがVS2013にコピーペーストするだけで実行できて、とても参考になりました。マルチスレッドプログラミング スレッドの作成 ス…

【cppcheck】warning: Opposite conditions in nested 'if' blocks lead to a dead code block.

c++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 warning: Opposite conditions in nested 'if' blocks lead to a dead code block. cppcheckのバージョン v1.67 サンプルプログラム 以下の…

【cppcheck】warning: Redundant assignment of 'xxx' to itself.

c++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 warning: Redundant assignment of 'xxx' to itself. cppcheckのバージョン v1.67 サンプルプログラム 以下のソースプログラムを解析にかけ…

【cppcheck】error: Memory is allocated but not initialized: xxx

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 error: Memory is allocated but not initialized: xxx cppcheckのバージョン v1.66 サンプルプログラム 以下のソースプログラムを解析にか…

【cppcheck】(warning) %d in format string (no. 1) requires 'int' but the argument type is 'ULONG {aka unsigned long}'.

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 (warning) %d in format string (no. 1) requires 'int' but the argument type is 'ULONG {aka unsigned long}'. cppcheckのバージョン v1…

【VC++】OCIを使ってOracle DBに接続するコード書いたよ。

C++

はじめに VC++でOCI(Oracle Call Interface)を使ってOracleに接続して、レコードをselectするコードを書いてみました。 参考にしたのは以下のページです。C言語の勉強3 Oracleデータベース接続 - 日記とかプログラムとか OCI (Oracle Call Interface) 新・門…

【cppcheck】(warning) sprintf format string requires 1 parameter but 2 are given.

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 (warning) sprintf format string requires 1 parameter but 2 are given. cppcheckのバージョン v1.66 サンプルプログラム 以下のソースプ…

【cppcheck】(style) Clarify calculation precedence for '+' and '?'.

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 (style) Clarify calculation precedence for '+' and '?'. cppcheckのバージョン v1.66 サンプルプログラム 以下のソースプログラムを解析…

【cppcheck】error: Undefined behavior: Variable 'xxx' is used as parameter and destination in s[n]printf().

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 error: Undefined behavior: Variable 'xxx' is used as parameter and destination in s[n]printf(). cppcheckのバージョン v1.66 サンプ…

(warning) The 2nd memset() argument '8224' doesn't fit into an 'unsigned char'.

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 (warning) The 2nd memset() argument '8224' doesn't fit into an 'unsigned char'. cppcheckのバージョン v1.66 サンプルプログラム 以下…

【C++】構造体のサイズとバイトアライメント

C++

はじめに 構造体のサイズとアライメントについて過去にハマッたことがあったので、まとめてみました。 構造体のサイズ 次のような構造体があった場合、ST_TESTのbyte数は1+4+1の6byteと思いきや、Windows 32bitの場合12byteになります。 これはメモリ上にメ…

C++のコードレビューで使いたい、コードの品質を向上させる3つの方法

C++

photo credit: iLikeSpoons via photopin cc はじめに コードレビュー時にレビューアの方はどんなことに気をつけてレビューしていますか? シンプルなコードになっているか、バグはないか、メンテナンス性は悪くないかなど、様々な観点でコードをレビューす…

【cppcheck】A pointer can not be negative so it is either pointless or an error to check if it is

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 (style) A pointer can not be negative so it is either pointless or an error to check if it is. cppcheckのバージョン v1.65 サンプル…

【cppcheck】(error) Buffer overrun possible for long command line arguments.

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 (error) Buffer overrun possible for long command line arguments. cppcheckのバージョン v1.65 サンプルプログラム 以下のソースプログ…

【VC++】デバッグログ出力時に呼び出し元関数名を出力する

C++

はじめに デバッグログを出力する関数の設計時に、呼び出し元の関数名を引数に含めるを忘れてしまいました。このため、テスト時にデバッグログを出力させたら、どの関数が吐いたログか分かりにくい状態となってしまった。関数の引数を変更しようにも、呼び出…

VC++で現在時刻をミリ秒まで取得する

C++

はじめに アプリケーションのデバッグログを出力するときなど、現在時刻をミリ秒まで取得したいときがあります。VC++で現在時刻をミリ秒まで取得するコードを書いてみました。 環境 Visual Studio 2005 サンプルプログラム #include <windows.h> void showNowTime() { S</windows.h>…

【cppcheck】(error) Resource leak: fp

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 (error) Resource leak: fp cppcheckのバージョン v1.65 サンプルプログラム 以下のソースプログラムを解析にかけると表示されます。 #incl…

【cppcheck】(error) Memory leak: pointer

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 (error) Memory leak: pointer cppcheckのバージョン v1.65 サンプルプログラム 以下のソースプログラムを解析にかけると表示されます。 #i…

【VC++】CryptoAPIでSHA-256のハッシュ値を生成する

C++

はじめに Visual C++ 2005の環境でCryptoAPIを使ってSHA-256のハッシュ値を生成するプログラムを書いてみました。新版暗号技術入門 秘密の国のアリスposted with amazlet at 14.07.10結城 浩 ソフトバンククリエイティブ 売り上げランキング: 5,620Amazon.co…

【cppcheck】Invalid memcmp() argument nr 3. A non-boolean value is required.

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 error: Invalid memcmp() argument nr 3. A non-boolean value is required. cppcheckのバージョン v1.65 サンプルプログラム 以下のソース…

【cppcheck】 (warning) Logical disjunction always evaluates to true

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 (warning) Logical disjunction always evaluates to true: val != 1 || val != 2 cppcheckのバージョン v1.65 サンプルプログラム 以下の…

【cppcheck】(warning) Found calculation inside sizeof().

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 (warning) Found calculation inside sizeof(). cppcheckのバージョン v1.65 サンプルプログラム 以下のソースプログラムを解析にかけると…

C6305の解説 sizeof 数と countof 数の間で不一致が発生した可能性があります

C++

photo credit: lincolnblues via photopin cc はじめに とあるコードをVisual Studio 2013でコード分析をかけたら以下の警告が表示されました。 警告 C6305: sizeof 数と countof 数の間で不一致が発生した可能性があります. C6305の警告の意味について調べ…

【cppcheck】Variable 'xxx' is reassigned a value before the old one has been used.

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 Variable 'xxx' is reassigned a value before the old one has been used. cppcheckのバージョン v1.64 サンプルプログラム 以下のソース…

Visual C++ 2013でDLLを作成して動的読み込みしてみる。

C++

はじめに Visual Studio Express 2013 for Windows DesktopでDLLを作成して、コンソールアプリケーションからDLLを動的読み込みして、関数を実行してみたいと思います。新版 明解C言語 入門編posted with amazlet at 14.05.02柴田望洋 ソフトバンククリエイ…

【cppcheck】The code contains characters that are unhandled. Neither unicode nor extended ASCII are supported.

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 The code contains characters that are unhandled. Neither unicode nor extended ASCII are supported. ソースコード中に、全角空白等の…

【cppcheck】Size of pointer 'xxx' used instead of size of its data.

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 Size of pointer 'xxx' used instead of size of its data. sizeof演算子に対してポインタ型変数を渡した場合に、警告が表示されます。 cpp…

【cppcheck】Checking if unsigned variable 'xxx' is less than zero.

c++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 Checking if unsigned variable 'xxx' is less than zero. cppcheckのバージョン v1.64 サンプルプログラム 以下のソースプログラムを解析…

【cppcheck】Buffer 'xxx' is being written before its old content has been used.

C++

はじめに C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。 Buffer 'xxx' is being written before its old content has been used. cppcheckのバージョン v1.64 サンプルプログラム 以下のソースプロ…

【C言語】#include <hoge.h>と#include "hoge.h"の違い

C++

はじめに C言語をはじめて習うときに必ずでてくる#include。 #include <hoge.h> #include "hoge.h" 今頃になって、#include <hoge.h>と#include "hoge.h"の違いを正しく理解できていなかったことに気づきました。 #include <hoge.h>と"hoge.h"の違い ぼくは、#include <hoge.h>と"hoge.h"の使</hoge.h></hoge.h></hoge.h></hoge.h>…