小さい頃はエラ呼吸

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


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

はじめに

C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。

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

cppcheckのバージョン
  • v1.66
サンプルプログラム

以下のソースプログラムを解析にかけると表示されます。

#include "stdafx.h"
#include <windows.h>

int _tmain(int argc, _TCHAR *argv[])
{

  ULONG hoge = 100;
  char szBuff[20] = { 0 };
  sprintf(szBuff, "%d", hoge); //-> (warning) %d in format string (no. 1) requires 'int' but the argument type is 'ULONG {aka unsigned long}'.
  sprintf(szBuff, "%lu", hoge); //-> OK
  printf("%s\n", szBuff);

  return 0;

}

上記のように、sprintf関数の書式指定文字列で指定している%dと実際のデータ型が一致していない場合に警告が出力されます。
変数hogeは、unsigned longなので書式文字列は%luが正しいです。

関連記事