Eclipse CDT:如何从源文件生成头文件?

问题描述 投票:1回答:2

用于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_ */

如果我在函数声明中更改了某些内容(如果我想要,最好用复选框更新什么),头文件也应该自动更新...

c eclipse eclipse-cdt
2个回答
0
投票

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并不罕见。此外,您可能定义了预处理器宏,这会使这种自动转换复杂化。


0
投票

在看到它似乎没有功能之后,我正在使用正则表达式搜索快速和脏,并替换:

  1. 关闭所有其他标签
  2. CTRL + H.
  3. 选择文件选项卡
  4. 在搜索字段中正则表达式:(?m)(?s) \{.*?\R\}\R
  5. 单击“活动编辑器中的资源”
  6. 单击替换
  7. 用分号;替换它
  8. 使用预览查看更改(以防万一)

可能有一个类似于Eclipse的宏录制器,只需点击一下即可完成?

© www.soinside.com 2019 - 2024. All rights reserved.