У меня есть некоторый опыт программирования, но не так много с C.
У меня достаточно большой C-файл.В нем есть несколько функций, которые выполняются последовательно, поэтому в данном конкретном случае ни одна функция не вызывается дважды, они разбиты для простоты чтения, поскольку каждая функция по-прежнему имеет отдельное назначение.
Эта программа выполняетмного вычислений на нескольких длинных массивах типа double с переменной длиной, поэтому все они являются указателями.Два вопроса:
1) Переменные, которые рассчитываются один раз с начала, а затем служат входными данными для многих последующих функций. Должен ли я сделать их глобальными переменными внутри этого файла?Из моего опыта программирования на языках более высокого уровня глобальные переменные не очень хороши.Разве это не так для C и почему?
2) Когда 1 из моей функции хочет вернуть несколько указателей (например, каждый указывает на двойной массив длины n), скажем double * p1, double * p2, double * p3, которые связаны, я могу объединить их в структуру:
struct pointers {
double *p1, *p2, *p3;
} ptr;
foo1 будет принимать в качестве ввода double * input и вычислять ptr-> p1, ptr-> p2, ptr-> p3, а затем ptr будет позже служить вводом для foo2.Должен ли я написать
struct pointers *foo(double *input)
или
void foo1(double *input, struct pointers ptr)
или
void foo1(double *input, struct pointers *ptr)
Почему функции C обычно являются "пустыми" функциями, если только они не возвращают простоint или двойные переменные?Имея вход и выход в качестве параметров - это сбивает с толку?
Должен ли я инициализировать ptr-> p1, ptr-> p2, ptr-> p3 внутри или снаружи foo1?
Обратите внимание, что foo () - это основная функция, которая будет вызывать foo1, foo2 последовательно.