Можно разделить переменную между файлами (как минимум) четырьмя способами. Вы уже упомянули два из них:
- с использованием
extern
: это будет глобальная переменная, любой сможет ее изменить, не поточно-ориентированный; использование глобальных переменных должно быть сведено к минимуму;
- передача указателя на переменную: он предоставит доступ для чтения / записи к переменной;
- передача значения переменной: обеспечивает доступ к переменной только для чтения;
- с использованием функции доступа.
Функция может быть простой:
float read_speed()
{
return speed;
}
Если переменную также нужно изменить, можно предоставить другую функцию:
void write_speed(float new_speed)
{
speed = new_speed;
}
Преимущество использования функций доступа в том, что они отделяют переменную от других файлов. При необходимости вы можете предоставить несколько функций для одной и той же переменной для разных нужд.
Стоимость кода немного увеличится, а скорость немного снизится.
Сравните:
float read_speed_mph(); // get speed in miles per hour
float read_speed_mps(); // get speed in meters per second
Они оба возвращают одинаковую скорость, выраженную в разных единицах. Тело функций выполнит правильное вычисление, чтобы обеспечить правильное значение, в то время как переменная останется неизменной.