为什么VC ++ 2010 Express在这个程序中不需要stdio.h但是gcc ++呢?

时间:2012-05-21 01:59:48

标签: c++

我有以下代码

#include <iostream>

using namespace std;

void WaitForEnter()
{
    while(1)
    {
        if('\n' == getchar()) 
        {
            break;
        }
    }
    return;
}

int main()
{
    cout<< "Press Enter to Exit... ";
    WaitForEnter();
}

这在Microsoft Visual C ++ 2010 Express上编译并完成我的预期。在使用code :: blocks和gcc ++ 4.7的Ubuntu上,构建失败并显示以下error: 'getchar' was not declared in this scope.如果我添加行#include "stdio.h",程序将编译并运行预期的行为。为什么这个程序在没有stdio.h的情况下使用MVC ++ 2010 Express编译,而在Ubuntu上使用gcc ++ 4.7的代码:: block则不编译。

3 个答案:

答案 0 :(得分:4)

使用MSVC时,<stdio.h>包含<iostream>作为包含{{1}}的副作用。查看预处理的输出,或按照MSVC文件中的#include路径。

答案 1 :(得分:2)

最简单的答案是标准允许任何标准标题包含任何其他标题。另一方面,如果您想编写可移植代码,则不应依赖于此,并且应包括翻译单元所需的所有标头。

答案 2 :(得分:0)

在Visual Studio中创建新项目时,它包含stdafx.h。在此文件中,它包括:

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>