Eclipse имеет функцию, которая генерирует пустой .c
из файла .h
, который называется «Методы реализации».В Eclipse не существует противоположного, и по вполне веским причинам.
Не поймите меня неправильно.Иногда вам нужно изменить заголовочный файл, но это не обязательно будет полезно сделать автоматически.По крайней мере, без каких-либо директив.Например, когда вы кодируете хвостовые рекурсивные функции, очень часто есть вспомогательная функция, которая не должна быть представлена.Это может выглядеть примерно так:
int sumArrayAux(int * array, size_t size, int currentSum) {
if(size == 0) return 0;
return sumArrayAux(array + 1, size - 1, *array);
}
int sumArray(int * array, size_t size) {
return sumArrayAux(array, size, 0);
}
В общем, вы не захотите выставлять первую функцию.Функция sumArray
предназначена для интерфейса.
Другой пример - если у вас есть структуры данных, с которыми не нужно работать, кроме как через API.Например, вы могли бы иметь следующее:
struct Matrix {
int * values;
size_t cols, rows;
};
И некоторые функции:
void matrixMultiply(Matrix * A, Matrix * B, Matrix *destination) {
...
}
size_t numberOfColumns(Matrix * m) { return M->cols; }
size_t numberOfRows(Matrix * m) { return M->rows; }
Тогда вы, вероятно, захотите .h
, который выглядит следующим образом:
typedef struct Matrix Matrix;
void matrixMultiply(Matrix * A, Matrix * B, Matrix *destination);
size_t numberOfColumns(Matrix * m);
size_t numberOfRows(Matrix * m);
Но в других случаях, например, если функция numberOfX
не существует, может иметь больше смысла раскрыть всю структуру Matrix
.
Дело в том, что файл заголовка должен бытьинтерфейс, и вы не должны менять интерфейс без уважительной причины и тщательного рассмотрения.В лучшем из миров вы должны внести любые изменения в файл .c
, не затрагивая ни один из файлов, включающих .h
.
. Кроме того, нередко иметь несколько файлов .c
реализовать один .h
.Кроме того, вы можете определить макросы препроцессора, которые усложнят такой автоматический перевод.