SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

UWPアプリ開発の最前線

Windows電卓の中はどうなっているのだろう?(後編)
~オープンソースのコードを改造してみよう

UWPアプリ開発の最前線 第14回

「坪」を変換できるようにする

 「坪」の選択肢を追加しましたが、「坪」と他の単位との間で値を変換できるようにはまだなっていません。ですが、とりあえずは、いま出ている実行時エラーを直しましょう。

実行時エラーの原因を探す

 さて、ここまでのコードをデバッグビルドして実行してみると、次の画像のように実行時エラーになってしまいます。その例外を出しているのはassertマクロで、その評価式を見てみると、idが166のとき(すなわち、「坪」のとき)、conversionFactorがゼロ(または負)になっているというのです。

デバッグ実行でエラーが出た
デバッグ実行でエラーが出た(UnitConverterDataLoader.cpp

 エラーが出た行のassertマクロは、デバッグビルド時のみコンパイルされます。ここを書いたプログラマーが、「この時点でconversionFactorが正の値になっていなければならない」ということを宣言しているのです。ゼロのまま実行していくと、いずれは"divide by zero"(ゼロ除算)例外が出るという意味のコメントが付けられています。

 このassertマクロが書かれていなければ、実行し続けるうちにゼロ除算例外が出ることになり、そこからのデバッグはおそらく困難なことになるのでしょう。わざわざassertマクロが書かれているということは、この近くに原因があるはずだということです(あるいは引数に問題があるかですが、ここで問題を起こしたconversionFactor変数は引数ではありません)。

 問題を起こしたconversionFactor変数がどのように生成されたのか、コードを少しさかのぼってみましょう(次の画像)。

conversionFactor変数の変遷を探る
conversionFactor変数の変遷を探る(UnitConverterDataLoader.cpp

 問題のconversionFactor変数(ピンク色の背景)は、unitConversions変数(オレンジ色の背景)から取り出されました。そのunitConversions変数は、categoryToUnitConversionDataMap変数(灰色の背景)から取り出されています。そして、categoryToUnitConversionDataMap変数は、GetConversionDataメソッドで初期化されているようです(行番号75)。

 そのGetConversionDataメソッドを見てみましょう(次の画像)。あ、ここで面積の換算率を定義しておかないといけないようですね。

GetConversionDataメソッドの冒頭部分
GetConversionDataメソッドの冒頭部分(UnitConverterDataLoader.cpp

次のページ
「坪」の換算率を追加する

関連リンク

この記事は参考になりましたか?

UWPアプリ開発の最前線連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11706 2019/09/24 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー