在将接口与C中的实现分离时,包含头文件的正确位置在哪里?
在接口文件(.h文件)中还是在实现文件(.c文件)中?为什么?
我的样本代码:
console.h
#ifndef CONSOLE_H
#define CONSOLE_H
#include <windows.h>
void gotoxy (const WORD x, const WORD y);
void clearScreen();
#endifconsole.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");
}发布于 2014-06-21 09:45:25
以下是一些原则:
因此,除了第3点之外,谨慎的做法是只包含绝对需要的头,并且只包含在实际需要它的文件中。就我个人而言,我经常只在收到编译器错误告诉我缺少了什么东西之后才包含一个标头。
发布于 2014-06-21 09:05:37
应该始终将包含指令包括在需要它们的文件中,或者使读取和理解代码更容易。
在您的示例中,在控制台中包含了windows.h。对于这样一个常见的头文件,只将它放在控制台中是可以的。但是,如果您使用的是您编写的另一个库,并且还没有被广泛采用,那么明智的做法是将它包含在两个文件中,以防止未来的开发人员不得不通过头文件搜索提供控制台中提供的功能的头文件。
发布于 2014-06-21 09:45:44
我只会对您的设置进行两次更改。我将在头文件中包含所有头部,但console.h头除外,这是包含头文件所必需的。其次,当您使用#define CONSOLE_H 1时,给它一个值,1就可以了。我只是防止一个未初始化的标签。看起来不错。
console.h
#ifndef CONSOLE_H
#define CONSOLE_H 1
#include <windows.h>
#include <stdlib.h>
void gotoxy (const WORD x, const WORD y);
void clearScreen();
#endifconsole.c
#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");
}https://stackoverflow.com/questions/24340016
复制相似问题