gpt4 book ai didi

c - 在 C 中分离接口(interface)和实现

转载 作者:太空狗 更新时间:2023-10-29 16:01:41 25 4
gpt4 key购买 nike

在 C 中将接口(interface)与实现分离时,包含头文件的正确位置在哪里?

在接口(interface)文件(.h文件)还是在实现文件(.c文件)?为什么?

我的示例代码:

控制台.h

#ifndef CONSOLE_H
#define CONSOLE_H

#include <windows.h>

void gotoxy (const WORD x, const WORD y);

void clearScreen();

#endif

控制台.c

#include <stdlib.h>
#include "console.h"

COORD coord = {0,0};

void gotoxy (const WORD x, const WORD y){
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

void clearScreen(){
system("cls");
}

最佳答案

这里有一些原则:

  1. 不必要的头文件只会增加编译时间。
    这听起来可能可以忽略不计,而且通常是这样,但如果您养成了包含太多内容的习惯,它可能会成为一个问题。

    假设您有一个项目的通用标题,其中包括所有其他项目标题和它们可能需要的所有系统标题。所以任何 .c 文件只需要包含这个头文件就可以了。这很方便。然而,除了稍微延长每个 .c 文件的编译时间外,它还保证每次更改单个 header 时都必须重新编译整个项目。这将显着减慢您的修改-编译-测试周期。

  2. 您必须避免创建循环包含依赖项。
    如果你确实创建了一个循环包含,你就有麻烦了。因此,最好避免包含任何不必要的内容:包含的内容越少,触发循环包含的 header 就越少。有时您可能需要插入前向声明而不是包含。

  3. .c 文件必须包含其 .h 文件。
    如果您不这样做,将不会根据 .h 文件中的声明检查 .c 文件中的函数签名,并且疯狂将随之而来。

    此原则的问题在于,如果 .h 文件未定义实现所需的类型,则您的 .c 文件可以在没有 include 的情况下正常编译。尽管如此,必须包含 include 以防止签名不匹配。

因此,除了第 3 点之外,谨慎的做法是只包含绝对需要的 header ,并且只包含在实际需要它的文件中。就我个人而言,我经常只在 收到一个编译器错误,告诉我缺少某些内容后包含一个 header 。

关于c - 在 C 中分离接口(interface)和实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24340016/

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