我刚刚开始使用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;
}
答案 0 :(得分:4)
这里似乎对stdafx.h
存在一些误解。首先,它只是一个头文件,其内容和名称都不是特别的(见下文)。
在Visual Studio中使用预编译头时,默认使用stdafx.h
和stdafx.cpp
来完成此操作。
预编译标题是一种加速编译的方法,通过预编译来实现。经常使用并很少将标题更改为包;然后可以在编译项目中的每个文件时使用此包。它主要包含各种类型的定义。
为了能够使用预编译的头文件,出于语言技术的原因,这需要是每个源文件中的第一段代码。因此,当您使用预编译头时,每个源文件的第一个代码行必须包含此共享头。如果不是这种情况,则标题之前的预处理程序宏定义可以从根本上改变包含文件的方式,从而使文件无效&#39;预编译的头文件。
现在回到Visual Studio,您要在windows.h
中包含的所有文件(例如stdafx.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的文件,以便编译器知道哪个是帮助文件。
完全可以使用不同的名称甚至多个预编译的标头;它需要的是属性页面中的一些额外配置。
答案 1 :(得分:-1)
是#include "stdafx.h"
会给尝试在Linux系统上编译代码的任何人带来问题。
stdafx.h
是Visual Studio提供的非标准标头。它包含几个其他标准头文件的#include
指令。我想,这个想法是避免输入标准的标题名称。
Linux系统不提供这样的标题。
如果您希望自己的代码可移植,则需要找出要包含在程序中的标准标题。
如果没有看到你的程序,就无法确定你需要哪些标题。
您可以编写自己的"stdafx.h"
文件,也可以复制Visual Studio生成的版本,但这样做没有太大意义。恕我直言,只是直接包含您需要的标准标题。