我有以下代码
#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则不编译。
答案 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>