头文件c++ windows到linux的转换
Header files c++ windows to linux conversion
我把一些文件从我的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.h
在header2.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.
}
一旦你编译了所有的代码,你就开始研究如何实现/替换那些你为编译而添加的函数。
- 将 Genteruse 从 Linux 转换为 Windows
- 绕过 Windows 中的 __declspec(dllimport) 到 Linux 项目的转换
- LINUX 操作系统上的错误:令牌之前预期的构造函数、析构函数或类型转换'('?
- CPP-将源代码从Windows转换为Linux
- GCC 编译器对类型转换有什么作用?为什么 mac 和 Linux 上的输出不同
- C/C++:是否可以将 Eclipse 项目设置配置为接受 void 指针而不对所有 Linux 发行版进行强制转换
- 如何在 c++ Linux 中使用 ICU 库将 UnicodeString 转换为 windows-1251
- 在 Linux 中将 UTF-32 宽字符转换为 UTF-16 宽字符以获取补充平面字符
- 如何使用 qt 将 Linux 文本文件转换为 Windows 文本文件
- 在Linux上构建Ogre时出错:缩小转换范围
- Linux 编译错误 - 无法将类型"字符串"转换为类型"字符串&&"
- 在Linux/GCC下,将NULL指针访问转换为C++异常
- Linux 和 Windows wchar_t之间的差异和转换
- 使用Swig进行Python将字符串转换为Linux
- 如何将目录路径转换为唯一的数字标识符 (Linux/C++)
- 如何在Linux中将共享库转换为静态库
- 如何利用windows API将c++代码从windows自动转换为linux
- Linux上有符号的16位ALSA PCM数据到U8的转换
- C++ 在 Win DLL 到 Linux SO 转换中将 LPBYTE 更改为无符号字符*后编译器错误
- Windows 和 Linux 之间的行尾分隔符转换