昨日の【無駄話】でまたまた世迷言を書きましたが、久々に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進数の整数変換を行う処理の実行画面)
