编译需要#include" stdafx.h"

时间:2015-05-25 21:19:51

标签: c++ visual-studio c++11

我刚刚开始使用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;
}

2 个答案:

答案 0 :(得分:4)

预编译的标题:它们是什么?

这里似乎对stdafx.h存在一些误解。首先,它只是一个头文件,其内容和名称都不是特别的(见下文)。

在Visual Studio中使用预编译头时,默认使用stdafx.hstdafx.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生成的版本,但这样做没有太大意义。恕我直言,只是直接包含您需要的标准标题。