我正在處理一個相當大的枚舉,它可以在概念上被劃分爲四個不同的類別。目前我在switch case語句中使用這個枚舉,以便將值映射到四個單獨的數組(符合四個不同的類別)。有沒有辦法改變局部變量中途通過switch case而不退出switch語句?
我很好奇的是,如果可以在switch case語句中的任意個案之後更改本地定義的變量。這將允許將開關語句分成這四個不同的部分,並且可以在這些部分發生針對每種情況發生的值賦值 - 如果相等的話。
一個簡單的例子就是我將用於如下:
設置
enum incidental_indexes {
arr1_0, arr1_2, arr2_0, arr1_1, arr2_1
} indexes;
struct foobar{
int arr1[3];
int arr2[2];
}
enum indexes unknown_index = ???; // In my code there are two separate indexes being mapped
// from one another, so for the sake of example imagine that
// this index is unknown
enum indexes curr_index = arr1_1; //Value here does not matter
struct foobar my_struc;
int * curr_arr;
int mapped_index;
暴力方法
switch(unknown_index){
case(arr1_0):
curr_arr = my_struc.arr_1; //First category array
curr_index = arr1_0;
break;
case(arr1_1):
curr_arr = my_struc.arr_1; //First category array, again
curr_index = arr1_1;
break;
case(arr1_2):
curr_arr = my_struc.arr_1; //First category array, again, again
curr_index = arr1_2;
break;
case(arr2_0):
curr_index = arr2_0;
curr_arr = my_struc.arr_2; //Second category array
break;
case(arr2_1):
curr_index = arr2_1;
curr_arr = my_struc.arr_2; //....
break;
}
理想路徑
switch(unknown_index){
default: //Notice no break.
curr_arr = my_struc.arr_1; //First category array
case(arr1_0):
curr_index = arr1_0;
break;
case(arr1_1):
curr_index = arr1_1;
break;
case(arr1_2):
curr_index = arr1_2;
break;
default: //Something like a second default, however disallowed
curr_arr = my_struc.arr_2; //Second category array
case(arr2_0):
curr_index = arr2_0;
break;
case(arr2_1):
curr_index = arr2_1;
break;
}
功能的好處顯然是不好的,但我很好奇,如果這個功能甚至存在於C,或者如果有可能是一個更好的方法來執行此操作。
謝謝!
注:'case'標籤是沒有的功能,所以你不應該使用括號。 (對於'return',順便說一句。) – Olaf
也許使用兩個'switch'es是更好的方法。不知道你實際上想用重新定義來完成什麼。 'case'標籤與'goto'類似,不像'if'語句鏈只需讓編譯器優化它即可。 – Olaf
您的各種定義包括'arr'和'_'以及'number',根本不適合人類。編程語言應該是機器和人類思維之間的橋樑。你的'switch'聲明似乎是這三件事加上'curr'的混合模糊。 –