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

Header files c++ windows to linux conversion

本文关键字:linux 转换 windows 文件 c++      更新时间:2023-10-16

我把一些文件从我的windows电脑上复制粘贴到我的linux电脑上,在conio.h和windows .h头文件上遇到了一些可以理解的问题,但我不记得它们是用来做什么的。

它们只在主函数中,所以我把它们注释掉,然后再次运行程序,认为错误会告诉我需要它们的地方,这样我就可以谷歌一下linux的头文件。

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

我的问题是如何/为什么编译器是否依次查看每个头文件,到达windows.h头文件并停止,然后当它被注释掉时,它会到达我的"chapter7 .h"头文件,并在那里找到所有问题。

或者在main.cpp中注释掉的头文件会影响我写的头文件吗?

或者(可能更有可能)我忽略了其他选项吗?

谢谢你的回答

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

这看起来是在你的情况下发生的, windows.h将是第一个包含,随后的头一直在使用它。

//#include <window.h>  
//#include <conio.h>
#include "myheader.h"    // can no longer use windows.h or conio.h
#include "myheader2.h"

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

或者在main.cpp中注释掉的头文件会影响我写的头文件吗?

肯定。假设:

//header1.h
#define X 1
//header2.h
#ifdef X
int a = 0;
#else
int a = 1;
#endif
如果header1.hheader2.h之前或之后包含,

a的定义将不同。

修复"我使用的头文件不能在这台机器上使用"的第一步是删除这些文件,编译代码,看看哪里出错-它几乎总是使编译器错误,所以你应该能够很容易地找到它。

conio.h允许console io,并且可能需要一些工作来将其修复到Linux中。这取决于你使用的是什么。

windows.h解释起来要复杂得多,因为它本质上给了你所有的Windows API函数,以及大量的类型声明,而且有很多。其中大部分可能永远不会[直接]使用。

"使用在其他地方不存在的头文件"的一个常见问题是,您最终会使用在头文件中声明的某些类型。例如,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. 
}

一旦你编译了所有的代码,你就开始研究如何实现/替换那些你为编译而添加的函数。