Если я правильно понял ваш вопрос, вы спрашиваете, можете ли вы выполнять вычисления во время компиляции, а не во время выполнения, и если есть оговорки?
Ответ зависит от сложности расчетов. Если они простые (детерминированные, как вы говорите), вы можете сделать это с успехом. Оговорки заключаются в том, что код для выполнения вычислений может быть менее простым для чтения, и он может значительно увеличить время компиляции.
Обобщение этого метода называется meta-programming, где вы добавляете еще один уровень кода-преобразования (компиляции) перед обычным кодом -> двоичное преобразование.
Вы можете использовать ограниченные формы, используя предварительный процессор. GCC также поддерживает некоторые выражения, которые оцениваются статически. Другие методы включают использование X-Macros в основном для получения параметрических шаблонов, например, в C++.
Существуют библиотеки, которые могут выполнять вычисления Turing-complete во время компиляции с использованием предварительного процессора (P99 for instance). Обычно синтаксис волосатый с большим количеством условностей и многими идиомами, чтобы учиться, прежде чем быть продуктивным.
В отличие от сложного метапрограммирования, я добился большей четкости и понимания кода со стороны коллег, поддерживающих мой код, при генерации кода с использованием, например, сценарий Perl или Python, чем когда я взломал что-то вместе с предварительным процессором.
EDIT:
Чтобы ответить на ваш вопрос с примером, я вам скажу, что я пишу много C-коду профессионально для микроконтроллеров с 4-16kb RAM и флэш-16-128kb кодового пространством. Большинство приложений работают как минимум на десять лет и потребуют обновления и добавления функций. Это означает, что я должен заботиться о том, чтобы не тратить ресурсы, поэтому я всегда буду предпочитать, что что-то можно вычислить во время компиляции, а не во время выполнения. Это экономит пространство кода за счет дополнительной сложности в сборке. Если данные постоянны, это также означает, что я могу поместить его в флеш-память только для чтения и сэкономить драгоценное ОЗУ.
Другой пример - в aes-min project, который представляет собой небольшую реализацию AES128. Я думаю, что есть выбор сборки, так что компонент в алгоритме (S-box?) Предварительно вычисляется и помещается в ПЗУ вместо ОЗУ. Другие симметричные алгоритмы шифрования должны вычислять некоторые данные из ключа, и если ключ является статическим, эта техника предварительного расчета может быть использована эффективно.
Если массив мал, время выполнения будет немного отличаться один так или иначе. Но если позже вы захотите изменить размер массива или его значения, код будет более гибким, если массив будет вычисляться во время выполнения, а вам придется перепечатать, возможно, большое количество значений, с риском опечаток. Я бы сказал, что это ответ, но для вашего представления о том, что значит «лучше». Альтернативой может быть наличие служебной программы, которая генерирует для вас исходный код. –