#define ID_A 5
#define ID_B 7
#define ID_C 9
const int id_arr={ ID_A, ID_B, ID_C, };
我知道我是否需要知道id_arr中ID_C的偏移量, 我可以使用像
这样的简单函数int get_offset(id){
for(i=0;i<id_arr_num;++i){
if(id==id_arr[i]) return i;
}
}
但是arr是const, 所以我可以知道ID_C的偏移在运行前会是2, 是否可以使用宏或其他方式在c运行时之前知道偏移量?
答案 0 :(得分:2)
不是直接使用ID,而是使用自身偏移的索引:
enum {
IDX_A,
IDX_B,
IDX_C,
IDX_COUNT
};
const int id_arr={ 5, 7, 9 };
/* Error checking to make sure enum and array have same number of elements (from assert.h) */
static_assert((sizeof id_arr / sizeof *id_arr) == IDX_COUNT, "Enum/array mismatch");
用法很简单:
id = id_arr[IDX_A];
答案 1 :(得分:1)
避免使用宏。
而你忘了定义id_arr_num
不,在运行时之前无法知道此索引,并尽可能避免使用全局值。
此功能将为您提供您正在寻找的变量的索引:
int get_offset(id, arr, size){
for(i = 0;i < size;++i)
if(id == arr[i]) return i;
}