无法打开包含文件:“stdio.h” - Visual Studio Community 2017 - C++ 错误

70

我正在尝试在Visual Studio Community 2017上构建解决方案,但是一直出现错误:“无法打开包括文件:'stdio.h'”。

我已经阅读了几个类似的问题,但还是无法解决这个问题。看起来stdio.h文件是在stdafx.h文件中调用的。以下是更多详细信息。有什么建议吗?

系统详细信息:

  • Windows 10
  • Visual Studio Community 2017 v.15.2 (26430.6) - 安装了C++桌面开发工具包 (截图:安装列表)

步骤1:我用C ++编写了著名的“Hello,World!”程序。

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
    cout << "Hello, World!" << endl;
    return 0;
}

步骤2:我点击了生成生成解决方案

问题:'stdio.h': 没有那个文件或目录。完整错误信息:

1>------ Build started: Project: HelloWorld, Configuration: Debug Win32 ------
1>stdafx.cpp
1>c:\users\dahiana mini\desktop\learncpp\helloworld\helloworld\stdafx.h(10):
    fatal error C1083: Cannot open include file: 'stdio.h': No such file or directory
1>Done building project "HelloWorld.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

故障排除细节和我尝试过的事项:

  1. 配置属性* → VC++目录 包含目录 $(VC_IncludePath);$(WindowsSDK_IncludePath);

  2. 屏幕截图:解决方案资源管理器(项目中的文件)

  3. stdafx.cpp 文件中的代码:

    // stdafx.cpp : source file that includes just the standard includes
    // HelloWorld.pch will be the pre-compiled header
    // stdafx.obj will contain the pre-compiled type information
    
    #include "stdafx.h"
    
    // TODO: reference any additional headers you need in STDAFX.H
    // and not in this file
    
  4. stdafx.h文件中的代码:

    // stdafx.h : include file for standard system include files,
    // or project specific include files that are used frequently, but
    // are changed infrequently
    
    #pragma once
    
    #include "targetver.h"
    #include <stdio.h>
    #include <tchar.h>
    

    注意:在<stdio.h><tchar.h>#include下都有红色波浪线,并显示“无法打开源文件”。

    尝试过:我尝试删除最后两行,但是接着出现了更多错误。

  5. 尝试过:由于许多人建议不需要使用stdafx.h,我尝试仅删除第一行#include "stdafx.h"。但为了使其正常工作,我需要进行一些额外的操作。请参见下面的答案。


3
在VS2017中,开始时请删除stdafx.h的引用,因为它是非标准的并且完全不必要的。 - DeiDei
2
禁用预编译头并删除stdafx*。 - user2672107
@DeiDei 噢,我实际上试过了。我会在上面添加它。某种程度上,这对我无效,因为我只删除了那行 #include "stdafx.h"。我需要做更多的事情,这也是我认为 @manni66 建议的。首先,我按照此处的说明设置了忽略预编译标头的选项。然后,我从代码中删除了那一行。感谢大家的意见! - dahiana
1
无论如何,这实际上有点奇怪,因为<stdio.h>必须存在并在任何正确配置的编译器中工作,即使在C++模式下也是如此。 - Paul Stelian
你可能想考虑使用 #include <cstdio> - Thomas Matthews
1
如果是这样,也许我的错误主要是由于我的Windows SDK安装与Visual Studio安装不兼容。请参见下面的答案。 - dahiana
15个回答

117

我在将项目从Visual Studio 2013迁移到Visual Studio 2017时遇到了同样的问题。

解决方法:更改 属性常规Windows SDK版本 为10。


9
那对我有用。谢谢!我也想补充一下,可以通过在解决方案资源管理器中右键单击项目来访问这些属性。 - Vardit
2
我还需要按照这里的描述安装“Windows通用CRT SDK”Visual Studio组件 - https://dev59.com/huk5XIcBkEYKwwoY_O6N#42778079 - Chris Koester
1
我在项目中什么都没改的情况下遇到了同样的问题。我猜可能与Windows更新有关?所选的版本是10.x,但有一个新版本可用并且它起作用了。我猜想这个新版本以前不存在,而当时它能够正常工作。 - Preza8
在Microsoft Visual Studio Community 2017 15.7.1上,我没有“Windows SDK版本”。但是,右键单击解决方案并执行“重新定位解决方案”可以解决问题。 - Swiss Frank
1
LOL,返回到“<继承自父级或项目默认值>”保存更改,然后再返回到“版本10”对我有用。 - Phi
我只是遇到了一个智能感知错误。更改了Win SDK版本后它就可以工作了,将其改回最新版本仍然可以工作。在编写CUDA代码之前,您需要调试编码平台... - Pedro77

21
面对在新电脑上安装VS2017 Community并从VS2013迁移解决方案后缺少stdlib.hstdio.h(以及可能更多)的问题。采用了@Maxim Akristiniy的建议,但仍然收到有关工具集兼容性的错误消息。但是,VS本身建议通过右键单击“解决方案资源管理器”中的解决方案,然后从菜单中选择重新定位解决方案,并从下拉列表中选择更新的Windows SDK版本进行解决。现在我的项目可以顺利构建。请注意,您可能需要将项目设置为启动项目,以便重新定位生效。

1
我注意到(令人沮丧的是),有时候在进行这些调整后,必须退出Visual Studio并重新启动它。 - HostileFork says dont trust SE
1
在Microsoft Visual Studio Community 2017 15.7.1中,我没有像得到最多赞的答案中提到的“Windows SDK版本”。但是,您的答案很好用,我不需要重新启动任何东西。 - Swiss Frank

12

解决此问题的三种方法:

  1. 忽略预编译头文件 #1
    步骤:项目 > 属性 > 配置属性 > C/C++ > 命令行 > 在“附加选项”框中添加 /Y- (属性页截图) > 确定 > 删除 #include "stdafx.h"
  2. 忽略预编译头文件 #2
    步骤:文件 > 新建 > 项目 > ... > 在应用程序向导窗口中单击“下一步” > 取消选中“预编译头”框 > 完成 > 删除 #include "stdafx.h"
  3. 重新安装 Visual Studio
    这对我也起作用了,因为我意识到可能是我的 Windows SDK 出了问题。我使用的是 Windows 10,但使用的是 Windows SDK 8.1。您可能也会遇到此问题。
    步骤:打开 Visual Studio 安装程序 > 单击三行菜单栏 > 卸载 > 重启计算机 > 打开 Visual Studio 安装程序 > 安装您想要的内容,但请确保只安装最新的 Windows SDK 10,而不是多个版本或 8.1 版本。

    我第一次安装 Visual Studio 时,会提示我需要安装 Windows SDK 8.1。所以我通过 Visual Studio 安装程序的“修改”选项进行了安装。也许这是个问题,因为我是在 Visual Studio 已经安装后再安装 SDK 的,或者是因为我需要 SDK 10 而不是 8.1。为了保险起见,我进行了完全重新安装。


选项1的问题在于你必须为每个项目都这样做。如果我找到更好的解决方案,我会在这里发布。 - dahiana

8

针对CUDA:

右键单击您的项目。

进入属性-> CUDA并将“CUDA Toolkit Custom Dir”设置为您的CUDA工具包目录。

对于我来说,这是:C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v10.0

enter image description here


7

如果您不想将Windows SDK升级到Windows 10(例如在一个开源项目中,该决策不是您做出的),则可以通过导航 工具 -> 获取工具和功能... -> 单独组件选项卡 并安装单独组件“Windows 8.1 SDK”(位于SDK、库和框架下)和“Windows Universal CRT SDK”(位于编译器、构建工具和运行时下)来解决这个问题。


4
除了将Windows SDK版本更改为10之外,我还需要安装“Windows通用CRT SDK” Visual Studio组件。 - Chris Koester

4

场景:

  1. 安装了Windows 10Visual Studio 2017(全新安装)。

  2. 'C'项目(出现错误,例如-> 无法打开源文件:'stdio.h'、'windows.h'等)。

解决方法:

  1. 运行 'Visual Studio Installer'。

  2. 点击 '修改' 按钮。

  3. 选择 'C++桌面开发'。

  4. 从“安装详细信息”(通常在右侧边栏中)选择:

    4.1. Windows 10 SDK(10.0.17134.0)

    • 4.1. 中的SDK版本仅为示例。
  5. 点击 '修改' 按钮,以应用更改。

  6. 右键单击 'SomeProject' -> '属性'。
  7. '配置:' -> '所有配置' 和 '平台:' -> '所有平台'。
  8. '配置属性' -> '常规' -> 'Windows SDK版本':
    • 更改(从下拉框中选择)SDK版本为当前已安装的版本;
  9. 点击 '应用' 按钮以应用更改。

更改Windows SDK版本(步骤8)对我有所帮助。 - Chang Sheng

3
一个临时解决方法:将 $(VC_IncludePath);$(WindowsSDK_IncludePath); 添加到 项目属性 / C/C++ / 常规 / 附加包含目录 中。

1
我...我坐在这里真的很震惊,我居然不得不这样做...我简直不敢相信这起作用了... - RedactedProfile
为什么它是脏的? - Peter Mortensen
Visual Studio 应该知道这些路径必须被包含,而不是向开发者询问...也许存在更深层次的错误,但我们可以通过这种方式来修复它... - Andy Lucny

3
我也遇到了同样的问题。另一个解决方案是添加默认包含文件。
以下是我用来解决问题的代码:
$(IncludePath);

这是什么意思?请提供一些上下文! - not2qubit

3
如果你在使用 Visual Studio 2019 (VS2019)时遇到这个问题,你可以从https://visualstudio.microsoft.com/downloads/下载构建工具。然后,在Visual Studio 2019的工具下下载Build Tools for Visual Studios 2019

2
对我来说,问题是我的Windows账户缺少权限。以下链接帮助我识别了问题:

Visual Studio中的stdio.h

Microsoft C++编译器,致命错误C1083:无法打开包括文件“stdio.h”

https://social.msdn.microsoft.com/Forums/vstudio/en-US/5402a5ae-82e5-4370-9297-5be12152ce5e/standard-users-cannot-open-windowsh-using-x64-native-tools

最值得注意的是文本“如果用户想使用本地工具编译win32项目,则必须让标准用户可以访问注册表编辑工具”。我在Windows中切换了用户并使用管理员帐户登录,问题就解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接