用于C / C ++开发人员的Eclipse IDE
版本:2018-12(4.10.0)Build id:20181214-0600
您好,有没有办法从源(.c)文件中的函数自动生成标题(.h)(加上保持最新)?甚至可能是反之亦然的发电机?
例:
test.c的
void print_val(int val) {
printf("Val: %i", val);
}
int add(int val1, int val2) {
return (val1 + val2);
}
现在我想自动生成一个头文件
foo.h中
/*
* foo.h
*
* Created on: 22.02.2019
*
*/
#ifndef FOO_H_
#define FOO_H_
void print_val(int val);
int add(int val1, int val2);
#endif /* FOO_H_ */
如果我在函数声明中更改了某些内容(如果我想要,最好用复选框更新什么),头文件也应该自动更新...
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
并不罕见。此外,您可能定义了预处理器宏,这会使这种自动转换复杂化。
在看到它似乎没有功能之后,我正在使用正则表达式搜索快速和脏,并替换:
(?m)(?s) \{.*?\R\}\R
;
替换它可能有一个类似于Eclipse的宏录制器,只需点击一下即可完成?