Последовательные конструкции в коде часто являются наиболее эффективными с точки зрения скорости.Если вы ищете улучшения в удобочитаемости (например, сколько строк кода), тогда цикл поможет, но, вероятно, снизит эффективность другими способами.Тем не менее, чтобы уменьшить количество строк, скажем, в цикле ...
Используйте комбинацию enum
, const char
массив и struct
.(структура здесь необязательна, но я часто использую ее для удобства чтения при работе с большим количеством членов)
У меня нет вашей среды, но для иллюстрации с использованием ANSI C ниже показано, как перечисляемые значения могут связыватьсяописания строк вместе со значениями измерений в одном и том же экземпляре структуры, позволяющие сообщать результаты в цикле:
enum {
FLAME_SENSOR, // enumerated from 0 to max_sensor
DISTANCE_SENSOR,
MOTION_SENSOR,
TOUCH_SENSOR,
SOUND_SENSOR,
// add more sensors???
MAX_SENSOR
};
typedef struct { // optional struct
int val;
char descr[20];
}PARAM;
const char str[MAX_SENSOR][20] = {"flame","distance","motion","touch","noise"};
//simulation prototype
int analogRead(int type);
int main(void)
{
int i;
PARAM p;
char buf[20];
int result = 0;
for(i=0;i<MAX_SENSOR;i++)
{
p.val = analogRead(i);// for use with struct
result = analogRead(i);//for use without struct
if(p.val /*(or result)*/ == some error)
{
//handle error
}
strcpy(p.descr, str[i]);//for use without struct
sprintf(buf, "%s: %d\n", p.descr, p.val);//for use with struct
sprintf(buf, "%s: %d\n", str[i], result);//for use without struct
printf(buf);
sleep(10); //10ms delay, For simulation only, to allow clock tick for rand() function
}
return 0;
}
//simple simulation of analog read function
int analogRead(int type)
{
int meas = 0;
srand(clock());
switch(type) {
case FLAME_SENSOR:
// meas = read flame sensor instrument
meas = rand()%10;
break;
case DISTANCE_SENSOR:
// meas = read dist sensor instrument
meas = rand()%10;
break;
case MOTION_SENSOR:
// meas = read motion sensor instrument
meas = rand()%10;
break;
case TOUCH_SENSOR:
// meas = read touch sensor instrument
meas = rand()%10;
break;
case SOUND_SENSOR:
// meas = read sound sensor instrument
meas = rand()%10;
break;
// add more case statements ???
default:
meas = some error
break;
}
return meas;
}