C++ 头文件c++;windows到linux的转换

C++ 头文件c++;windows到linux的转换,c++,linux,header-files,C++,Linux,Header Files,我已经将一些文件从我的windows机器复制并粘贴到我的linux机器上,在conio.h和windows.h头文件中遇到了一些可以理解的问题,但我记不起它们的用途 它们只在主函数中,所以我将它们注释掉,然后再次运行程序,认为错误会告诉我需要它们的位置,这样我就可以用谷歌搜索哪些标题同样适用于linux 我遇到的问题是,我得到的所有错误都在主函数中包含的头文件中,但没有包含Windows.h或conio.h头文件 我的问题是如何/为什么:- 编译器是否会依次查看每个头文件,转到windows.h

我已经将一些文件从我的windows机器复制并粘贴到我的linux机器上,在conio.h和windows.h头文件中遇到了一些可以理解的问题,但我记不起它们的用途

它们只在主函数中,所以我将它们注释掉,然后再次运行程序,认为错误会告诉我需要它们的位置,这样我就可以用谷歌搜索哪些标题同样适用于linux

我遇到的问题是,我得到的所有错误都在主函数中包含的头文件中,但没有包含Windows.h或conio.h头文件

我的问题是如何/为什么:- 编译器是否会依次查看每个头文件,转到windows.h头文件,然后在注释掉后停止,然后转到我的“Chapter_7.h”头文件,并找到其中的所有问题

或者main.cpp中标题的注释是否会以某种方式影响我编写的标题

或者(可能更可能)还有我忽略的另一个选择吗


感谢您的回答。

这是由于
.h
文件被“包括”在
.cpp
中的方式造成的。在编译过程中,头文件中的所有文本都被复制粘贴到include
.cpp
文件中。这意味着以后的
.h
文件将可以访问以前的文件

这看起来就是您的情况,
windows.h
将是第一个include
,随后的标题一直在使用它

//#include <window.h>  
//#include <conio.h>
#include "myheader.h"    // can no longer use windows.h or conio.h
#include "myheader2.h"
/#包括
//#包括
#包括“myheader.h”//无法再使用windows.h或conio.h
#包括“myheader2.h”

这是由于
.h
文件被“包括”在
.cpp
中的方式造成的。在编译过程中,头文件中的所有文本都被复制粘贴到include
.cpp
文件中。这意味着以后的
.h
文件将可以访问以前的文件

这看起来就是您的情况,
windows.h
将是第一个include
,随后的标题一直在使用它

//#include <window.h>  
//#include <conio.h>
#include "myheader.h"    // can no longer use windows.h or conio.h
#include "myheader2.h"
/#包括
//#包括
#包括“myheader.h”//无法再使用windows.h或conio.h
#包括“myheader2.h”

如果您的意思是这样的话,您可以说标题内容是复制粘贴到它们所包含的文件中的

或者main.cpp中标题的注释是否会以某种方式影响我编写的标题

当然。假设:

//header1.h
#define X 1

//header2.h
#ifdef X
int a = 0;
#else
int a = 1;
#endif

如果
header1.h
header2.h
之前或之后包含
header1.h
,则
的定义将有所不同。如果您的意思是这样的,则可以说头内容是复制粘贴在文件中的

或者main.cpp中标题的注释是否会以某种方式影响我编写的标题

当然。假设:

//header1.h
#define X 1

//header2.h
#ifdef X
int a = 0;
#else
int a = 1;
#endif
如果
header1.h
header2.h
之前或之后包含
header1.h
,则
的定义将有所不同。修复“我正在使用无法在此机器上使用的headerfile”的第一步是删除这些文件,编译代码,并查看哪里出了问题-几乎总是会出现编译器错误,所以你应该可以很容易地找到它

conio.h
允许控制台io,可能需要一些工作才能将其修复到Linux中。具体取决于您使用的是什么

windows.h
的解释要复杂得多,因为它本质上提供了所有windows API函数和大量类型声明,其中有很多。你的程序可能从未[直接]使用过其中的大部分

“使用其他地方不存在的headerfile”的一个常见问题是,最终使用的是headerfile中声明的某些类型。例如,
windows.h
将声明LONG、HANDLE和大量其他类型。这些类型随后在其他地方的结构和函数声明中使用,当您删除
windows.h
时,它将导致各种后续问题

我的方法总是先解决第一个问题,然后再编译。原因是,如果出现奇怪的情况,编译器经常会“困惑”。这有点像你告诉一个朋友怎么开车回家,然后你说“当你看到左边的大橡树,你就往右边走”。你不知道,这棵橡树已经被砍倒了,因为它已经死了,现在已经不在了。所以,你的朋友开车去橡树曾经所在的地方,然后在路上一棵橡树后右转。当然,现在所有其他说明都完全可用了,因为你的朋友离正确的道路很远,如果没有新的说明,他永远也找不到你的房子。当编译器在源文件中发现“意外”或“丢失”位时,也会发生同样的情况。因此,修复第一个错误,然后编译,修复,编译,通常会让您的代码编译到某个点。有时,这需要编写如下新函数:

int GetTimeOfDay(void)
{
    printf("%s:%d:%s: doesn't work yet, exiting...", __FILE__, __LINE__, __func__);
    exit(1);
    return 0;  // to keep compiler happy. 
}
一旦您完成了所有代码的编译,您就开始研究如何实现/替换为使其编译而添加的那些函数

修复“我正在使用我无法在这台机器上使用的HeaderFile”的第一步是删除这些文件,编译代码,看看哪里出了问题-它几乎总是导致编译器错误,因此您应该能够很容易地找到它

conio.h
允许控制台io,可能需要一些工作才能将其修复到Linux中。具体取决于您使用的是什么

windows.h
的解释要复杂得多,因为它本质上提供了所有windows API函数和大量类型声明,其中有很多。你的程序可能从未[直接]使用过其中的大部分

“使用头文件”的常见问题之一