Плохо ли хранить значение члена структуры в локальной переменной с более коротким именем? - PullRequest
0 голосов
/ 17 февраля 2019

Я использовал структуру для хранения некоторых данных, которые я прочитал из файла.Членами структуры являются числа с плавающей точкой и массив целых чисел без знака.После чтения файла ни одно из значений не изменится.Значение, которое я хочу сохранить локально, является одним из целых чисел без знака, содержащихся в массиве членов структуры.

Это плохая практика - ссылаться на указатель структуры на значение и сохранять его в локальной переменной для последующего использования, или я должен просто выписывать foo-> vals [MY_NUMBER] каждый раз, когда я хочуиспользуйте это значение для чего-либо.

Спасибо, что нашли время, чтобы проверить мой вопрос.

В настоящее время мой код настроен именно так, как я написал ниже, без использования таких вещей, как:

 while (timer < config->values[MY_NUMBER]){ /* code*/}

my_struct.c:

typedef struct Config {
  float MY_FLOAT;
  unsigned int values[TOTAL_PARAMS];
} Config;

main.c:

int main(int argc, char **argv) {

  Config *config = load_config();

  int timer = 0;
  int finish_time = config->values[FIN_TIME];

  int rand_min_max[2] = {config->values[MIN],config->values[MAX]};

   /*... code*/

  while (timer < finish_time) {
    randomizer_func(rand_min_max);
    /* Code*/
  }
}

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Нет, это не кажется плохой практикой, без дальнейшего контекста.

Поскольку значения конфигурации не изменятся, а вы просто копируете нужные вам параметры конфигурации, вы 'сделать код немного более читабельным без каких-либо недостатков.

0 голосов
/ 17 февраля 2019

Оптимизатор должен очистить это, так что я сомневаюсь, что будет перфорированный удар.Вопрос в том, делает ли он ваш код более читабельным и / или более легким в обслуживании?Использование временных переменных таким способом довольно распространено.Если вы не можете придумать причину , что это "плохо", продолжайте.

Еще одна вещь, которую следует учитывать, это копирование в локальную переменную и избегание разыменования указателя каждый развы потенциально ускоряете доступ к рассматриваемому значению.ОДНАКО: это значение, вероятно, кэшируется после первого доступа, и, опять же, Волшебный, Wonderful Optimizer, вероятно, исправит это.(Но, как инженер, вы никогда не должны рассчитывать на это - тестируйте и проверяйте, а не предполагайте.)

По-моему (все в порядке), вы в порядке.Иди с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...