gpt4 book ai didi

c - eclipse CDT : How to generate header file from source file?

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:18 25 4
gpt4 key购买 nike

面向 C/C++ 开发人员的 Eclipse IDE

版本:2018-12 (4.10.0)构建 ID:20181214-0600


您好,有没有办法从源(.c)文件中的函数自动生成标题(.h)(并保持最新)?甚至可能是反之亦然的发电机?

例子:

测试.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 有一个函数可以从 .h 文件生成一个空的 .c,称为“实现方法”。 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 旨在成为接口(interface)。

另一个例子是,如果你有一些数据结构,除了通过 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 的整个结构可能更有意义。

重点是头文件应该是接口(interface),如果没有充分的理由和仔细考虑,你不应该改变接口(interface)。在最好的情况下,您应该对 .c 文件进行任何更改,而不会影响包含 .h 的任何文件。

此外,使用多个.c 文件来实现一个.h 的情况并不少见。此外,您可能定义了预处理器宏,这会使这种自动翻译变得复杂。

关于c - eclipse CDT : How to generate header file from source file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54827616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com