昨日の【無駄話】でまたまた世迷言を書きましたが、久々にC++でプログラムを書きたい、というのは本音で、今日から少しずつ進めて行こうかとアウトラインを書き始めました。名付けて

 

Calc

 

という「整数算術式の演算プログラム」です。

 

ところが、

 

いやはやC#にどっぷりと漬かっていたので最初からエラーの連発です。

 

先ず、整数算術式の演算を行うオブジェクトの「CALCクラス」を作ろうということで、

 

////////////////////////////////
// Calcクラス定義ファイル
//(整数算術式演算ライブラリー)
// Copyright (c) 2024 by Ysama
////////////////////////////////

class CALC
{
private:

public:
    CALC();                                  //コンストラクター
    ~CALC();                                //デストラクター
    int DoCalc(wchar_t*);              //演算制御を行う主関数
};                                               //解説:これがC#と違う

 

というところから始めたのは良いのですが、先ず入力文字列バッファーを確保しようとして、

 

char[512] formula;    //formulaという文字列変数

 

等と書いてしまい、コンパイラーに怒られました。(

:C#では”string”で済んでしまいますが、C++では1バイトのchar変数の配列を用意します。この際、C#なら"char[] formula = new char[512];"等と書くので、ごっちゃになりました。C++で書く場合は"char formula[512];"が正解です。

 

そんな覚束ないことをやっているのに、

 

「どうせやるならUnicodeで。」

 

と思ったために、更に

 

//ワイド文字を使用する
#define        UNICODE    1
#include    <wchar.h>    //Unicode使用の為

 

をつけたのは良いのですが、次のような形でエラーでまくりです。(

 

アウト     正解

WCHAR     wchar_t

cout      wcout

cin       wcin

strlen     wcslen

strcpy     wcscpy

main      wmain

:WCHARはWindowsで使うMicrosoftの型でした。正しくはISO/IEC 9899/AMD1:1995で定まったwchar_tとなります。又、私はUnicodeを使ったECCSkeltonを作りましたが、今回はコンソールベースにするので、そういう意味ではAnsiベースの関数のユニコード版については全くのトーシロであったことを思い知らされました。なお、"wcs"は("str"が"string"を意味したように)"wide character string"の意味かと。

 

トホホ...

 

ですが、まぁ、のんびりじっくりやりましょう!

(写真はCalcのテストプログラムで、先ずは2、16、10進数の整数変換を行う処理の実行画面)