ユーザーが有効な方向を通過するたびに常に正しい状態 (CA、AL など) の文字列が表示されるように、このコードを書き直すにはどうすればよいですか。
つまり、実行時よりもコンパイル時の方が enum の方向で enum_types のそれぞれに有効な case ステートメントがあることを確認するにはどうすればよいですか?
為に。例えば。私は意図的に East のケースステートメントをコメントアウトしました。コンパイル時にこれをキャッチする方法はありますか。
これが言語がデフォルトのケースを提供する理由であり、したがってこれは不可能かもしれないという私の直感は(いいえ)です。しかし、私はこれを専門家に任せます。
#include <iostream>
#include <string>
using namespace::std;
typedef enum
{
min_dir = -1,
north,
south,
east,
west,
}directions;
directions get_direction( string user_choice)
{
if(user_choice == "north")
{
return north;
}
else if (user_choice == "south")
{
return south;
}
else if (user_choice == "east")
{
return east;
}
else if (user_choice == "west")
{
return west;
}
else
{
return min_dir;
}
}
int main()
{
string user_direction;
cout << "Enter direction\n";
cin >> user_direction;
directions my_dir = get_direction(user_direction);
cout << " Print direction's description\n";
if( my_dir == min_dir)
{
// User passed junk
return -1;
}
switch(my_dir)
{
case north:
cout << "North - New york\n";break;
case south:
cout << "South - Alabama\n";break;
// case east:
// cout << "East - North Carolina\n";break;
case west:
cout << "West - California\n";break;
default:
cout << "Should Ideally never get here\n";break;
}
system("pause");
return 0;
}
編集:これは要点を説明するための単なる例です。これは、作業中のコード用です。彼らはこれを Windows (MSVC) と Linux (gcc) の両方でコンパイルしました。これは単なる警告でしょうか?より厳しい取り締まりが必要です。
列挙型に case ステートメントがない場合、make プロセス中にエラーになるコードを書くことはできますか?