繁体   English   中英

编译需要#include“stdafx.h”

[英]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.hstdafx.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM