[英]Compiling requires to #include “stdafx.h”
我刚开始使用Visual Studio 2013.在我开始将#include“stdafx.h”放在每个cpp文件的开头之前,我的代码不会编译。 当其他人通过Linux终端编译我的代码时,这会导致任何问题吗? 如果我只是从下面的代码中删除#include“stdafx.h”,它会用g ++编译C ++ 11吗?
#include "stdafx.h"
#include<iostream>
using std::cout; using std::endl; using std::cin;
using namespace std;
int main()
{
cout << "This is an awesome game to play with your friends!"
<< endl << "You have to pick an integer between 10 and 49 and type it in"
<< endl << "Then your friend has to pick an integer between 50 and 99 and type it in."
<< endl << "Through a series of highly advanced calculations starting with their number,"
<< endl << "They regenerate your original number. Have fun!"
<< endl << ""
<< endl << "Please enter your integer number, between 10 and 49:";
int your_int, their_int, factor, sum, calculation, result;
cin >> your_int;
factor = 99 - your_int;
cout << "Factor: " << factor
<< endl << "Now, please enter your friend's integer number between 50 and 99:";
cin >> their_int;
sum = factor + their_int;
calculation = sum / 100 + sum % 100;
result = their_int - calculation;
cout << "The sum is: " << sum
<< endl << "The calculation is : " << calculation
<< endl << "The result is :" << result
<< endl << "My answer was: " << your_int
<< endl << "Your result was: " << result;
return 0;
}
这里似乎有一些关于stdafx.h
误解。 首先,它只是一个头文件,它的内容和名称都不是特别的(见下文)。
在Visual Studio中使用预编译头时,默认情况下使用stdafx.h
和stdafx.cpp
来完成此操作。
预编译头是一种加速编译的方法,通过'预编译'经常使用和很少更改的头到包中; 然后可以在编译项目中的每个文件时使用此包。 它主要包含各种类型的定义。
为了能够使用预编译的头文件,出于语言技术的原因,这需要是每个源文件中的第一段代码。 因此,当您使用预编译头时,每个源文件的第一个代码行必须包含此共享头。 如果不是这种情况,则标头之前的预处理器宏定义可以从根本上改变包含文件的方式,从而使预编译头“无效”。
现在回到Visual Studio,您要在stdafx.h
包含的所有文件(例如windows.h
,STL标题等)之间共享所有标题和定义。 stdafx.cpp
只是编译器的辅助文件,它用于实际生成pch文件; 您作为用户从不触摸此文件。
现在回答你的问题:
选项1只要您坚持使用C ++ 11标准并使用可移植代码,在stdafx.h
和其他任何地方,将它包含在任何地方的第一个标题都没有问题。 当您使用Visual Studio时,您可以使用预编译的头文件,任何Linux环境都会将其视为另一个头文件。 事实上,其他编译器也具有预编译头文件,当提供正确的构建标志时,他们将能够直接使用stdafx.h
。
选项2您可以在项目属性表中禁用预编译标题,在C / C ++,预编译标题下,您可以将预编译标题从使用设置为不使用预编译标题。 不要忘记为Debug和Release配置执行此操作。 关闭此选项后,您不再需要将stdafx.h
添加到任何文件中。 我发现IntelliSense在使用预编译头文件时效果最好,因此我通常更喜欢将它们保留在小型项目中。
stdafx.h
其他信息 如前所述, stdafx.h
并不特别。 Visual Studio项目页面,C / C ++,预编译标题,说明要用作预编译标头的文件名。 文件stdafx.cpp
有一个特殊的属性页,它与该主题上的其他文件不同。 它是唯一一个将预编译头设置为Create而不是Use的文件,因此编译器知道哪个是帮助文件。
完全可以使用不同的名称甚至多个预编译头文件; 它需要的是属性页面中的一些额外配置。
是的#include "stdafx.h"
会给尝试在Linux系统上编译代码的任何人带来问题。
stdafx.h
是Visual Studio提供的非标准头。 它包含几个其他标准头文件的#include
指令。 我想,这个想法是避免输入标准的标题名称。
Linux系统不提供这样的标头。
如果您希望代码可移植,则需要找出要包含在程序中的标准标头。
如果没有看到您的程序,就无法确定您需要哪些标头。
您可以编写自己的"stdafx.h"
文件,或者复制Visual Studio生成的版本,但这样做没有多大意义。 恕我直言,只需要直接包含您需要的标准标题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.