加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C中分离接口和实现

发布时间:2020-12-16 09:52:50 所属栏目:百科 来源:网络整理
导读:在将接口与C中的实现分开时,哪里是包含头文件的正确位置? 在接口文件(.h文件)或实现文件(.c文件)中?为什么? 我的示例代码: console.h #ifndef CONSOLE_H#define CONSOLE_H#include windows.hvoid gotoxy (const WORD x,const WORD y);void clearScreen()
在将接口与C中的实现分开时,哪里是包含头文件的正确位置?

在接口文件(.h文件)或实现文件(.c文件)中?为什么?

我的示例代码:

console.h

#ifndef CONSOLE_H
#define CONSOLE_H

#include <windows.h>

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

void clearScreen();

#endif

console.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");
}

解决方法

以下是一些原则:

>不必要的包含标头只会增加编译时间.
这可能听起来很容易被忽视,而且一般来说,但如果你养成了包含太多的习惯,它就会成为一个问题.

想象一下,您的项目有一个通用标题,包括所有其他项目标题以及它们可能需要的所有系统标题.所以任何.c文件只需要包含这一个标题并完成它.这很方便.但是,除了延长每个.c文件的编译时,它还保证每次更改单个标头时都必须重新编译整个项目.这将显着减慢您的修改 – 编译 – 测试周期.
>您必须避免创建循环包含依赖项.
如果你确实创建了一个循环包含,那你就麻烦了.因此,最好避免包含任何不必要的内容:包含的内容越少,触发循环包含的标头越少.有时您可能需要插入前向声明而不是包含.
> .c文件必须包含其.h文件.
如果你没有这样做,.c文件中的函数签名将不会根据.h文件中的声明进行检查,并且会出现疯狂.

这个原则的问题是,如果.h文件没有定义实现所需的类型,那么你的.c文件可以在没有include的情况下正常编译.然而,包含必须在那里以防止签名不匹配.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读