交換はどうですか:
cout << code;
と:
if (code == PING)
cout << "PING";
else
cout << code;
が1つしかない場合は、これが最も簡単な方法です#define
。#define
より複雑なケースでは、値に基づいて、次のような文字列の配列を検索できます。
#define E_OK 0
#define E_NOMEM 1
#define E_BADFILE 2
#define E_USERERROR 3
#define E_NEXT_ERR 4
static const char *errStr[] = {
"Okay",
"No memory left",
"Bad file descriptor",
"User is insane",
};
:
if ((errCode < 0) || (errCode >= E_NEXT_ERR))
cout << "Unknown error: " << errCode << '\n';
else
cout << "Error: " << errStr[errCode] << '\n';
値が異なる場合は、次のような非アレイベースのソリューションを選択できます。
#define PING 10
#define STATUS 20
#define FETCH 74
#define ACK 12
#define TRAIL 9
#define EXIT 198
:
const char *toText (int errCode) {
if (errCode == PING ) return "Ping";
if (errCode == STATUS) return "Status";
if (errCode == FETCH ) return "Fetch";
if (errCode == ACK ) return "Ack";
if (errCode == TRAIL ) return "Trail";
if (errCode == EXIT ) return "Exit";
return "No idea!";
}
検討したいもう1つのことは#define
、値を列挙型定数に置き換えることです。このような単純なことは問題ではないかもしれませんが、提供される型安全性と追加情報により、キャリアのある時点でのデバッグ作業がほぼ確実に容易になります。
現在、私は通常#define
、条件付きコンパイルにのみ使用します。定数は列挙型でより適切に実行され、インライン関数であるべきものとすべきでないものについてコンパイラーを考え抜くことができてから長い時間が経ちました:-)