const "глобальные" константы в порядке - но поместите их в свое собственное пространство имен. Ниже приведен пример такого рода вещей, которые довольно распространены. Они не существуют в глобальном пространстве имен, поэтому не являются глобальными.
namespace ApproximateMathConstants{
const double pi = 3.0;
const double e = 2.0;
}
Если вы хотите сохранить глобальную переменную, как в вашем примере, чтобы избежать передачи стольких параметров, лучшим вариантом может быть заключаться в инкапсуляции некоторых из этих параметров в объект класса. Или превратите функции в функции / методы-члены для класса, который будет иметь доступ к переменным-членам.
Помимо проблем, о которых вы уже упоминали, глобальные переменные могут позже вызвать много других непредвиденных проблем, которые будут чрезвычайно трудно отлаживать; например, что произойдет, если вы запустите свой код в более чем одном потоке?
Кроме того, если у вас есть функция, зависящая от некоторой глобальной переменной, то вызов дважды одной и той же функции с одинаковыми входными данными приведет к приводят к разным результатам (если нет, зачем вообще иметь глобальный). Хотя это может быть тем, что вам нужно, это может привести к очень странному и неожиданному поведению.