2016-07-09 3 views
0

Я пишу функцию, которая имеет несколько постоянных массивов со многими числовыми значениями. Эти массивы содержат коэффициенты для полиномиальных уравнений и не меняются. Сейчас я определил массивы в одной и той же функции (CPP-файл), например:Где разместить постоянный массив?

double coefficients[7] = { 
     271.155123745294, 
     -2.03521046106355, 
     8.79645207223641E-03, 
     -1.38958348112727E-05, 
     -2.048607610462E-08, 
     9.372391616E-11, 
     -8.397701E-14 
    }; 

Глядя на мой код, я не очень доволен «смотреть» кода и спросил себя, если есть более удобное решение (например, добавление пучка постоянных значений в отдельный файл или в заголовок). Это не проблема, но, на мой взгляд, читатель отвлекается от алгоритма.

+0

#define co1, co2, co3 ..[Директивы препроцессора] (http://www.cplusplus.com/doc/tutorial/preprocessor/) –

+3

@FirstStep Почему бы вам не использовать макрос препроцессора, если вместо этого вы можете использовать правильную переменную const? –

+1

Какой язык? Вы описываете файл .c (предлагая язык C), но отметили вопрос как C++. Есть некоторые варианты, которые предпочтительнее на одном языке или другом. – Peter

ответ

4

Вы можете поместить свои константы в свой собственный файл и #include их там, где они вам нужны - это не проблема.

Кстати, вы говорите, что константы, но в вашем примере ваш массив не const - но это могло произойти, если вы не собираетесь его менять.

3

Вы можете

  • положить константы массива в пространстве имен наряду с функцией (анонимные имена, вероятно, достаточно хорошо),

  • поместить их в глобальном пространстве имен, как static констант, а также с функцией (примечание: это использование static, для данных, устарело)

  • помещает их в отдельные функции доступа, которые могут быть static.

Кстати, добавьте const.

Это также сообщает, что они постоянны.

0

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

+1

«Постоянная одного человека - переменная другого человека». - Старая пословица джунглей –

0

Вы должны были использовать квалификатор const для вашей двойной переменной coefficients.

Глядя на мой код, я не очень доволен «смотреть» кода

Да, вы были правы. Это не выглядит хорошо, и есть лучшие способы сделать это.

Вы можете добиться большей читаемости, если вы использовали модификатор static с переменной и поместите его вне определения функции. Или вы можете просто сделать его глобальным в файле .cpp чуть выше определения функции, которое будет иметь к нему доступ.

И да, separate accessor functions (сделайте это static) также является хорошей идеей, как указано в одном из ответов.

Вы также можете попробовать X Macro, если это помогает в вопросах удобочитаемости кода.

Смежные вопросы