首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取用于C++的正确编译器

获取用于C++的正确编译器
EN

Stack Overflow用户
提问于 2010-02-21 13:02:15
回答 10查看 1.7K关注 0票数 9

我正在努力学习c++,但我阅读或查找的大多数教程和书籍都教会了你这一点……

(我假设像大多数教程一样,他们在一开始就在win32控制台或CLR控制台中教代码。在任何一种情况下,以下操作都不起作用。)

代码语言:javascript
运行
复制
#include <iostream>
int main(  )
{
    std::cout << "Hello World\n";
    return (0);
}

我的集成开发环境是Visual C++ 2008速成版,他们接受这样的代码

代码语言:javascript
运行
复制
#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

或者像这样

代码语言:javascript
运行
复制
#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
    Console::WriteLine(L"Hello World");
    return 0;
}

老实说,我不知道这些有什么不同,我也不确定我是否应该下载一个旧的编译器,这样它就可以工作了。如果有人能告诉我这些有什么不同,以及从哪里开始。这会有很大的帮助。感谢编辑

我正在试着做一个简单的hello world。但我得到的错误是“系统无法找到指定的路径”。我有屏幕截图,显示了错误的样子。它还表明,当我在构建文件之前明确保存该文件时,我的项目已过期。显然,它找不到可执行文件。我转到debug文件夹,没有看到任何.exe文件。

编辑过的

好的,现在当我尝试构建项目时,我得到了以下错误

代码语言:javascript
运行
复制
1>------ Rebuild All started: Project: test, Configuration: Debug Win32 ------
1>Deleting intermediate and output files for project 'test', configuration 'Debug|Win32'
1>Compiling...
1>stdafx.cpp
1>Compiling...
1>test.cpp
1>c:\users\numerical25\desktop\test\test\test.cpp(1) : warning C4627: '#include <iostream>': skipped when looking for precompiled header use
1>        Add directive to 'stdafx.h' or rebuild precompiled header
1>c:\users\numerical25\desktop\test\test\test.cpp(6) : error C2653: 'std' : is not a class or namespace name
1>c:\users\numerical25\desktop\test\test\test.cpp(6) : error C2065: 'cout' : undeclared identifier
1>Build log was saved at "file://c:\Users\numerical25\Desktop\test\test\Debug\BuildLog.htm"
1>test - 2 error(s), 1 warning(s)
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

下面是我使用的代码

代码语言:javascript
运行
复制
#include <iostream>
#include "stdafx.h"

int main(  )
{
    std::cout << "Hello World\n";
    return (0);
}

注意:我试着在没有#include "stdafx.h“和#include "stdafx.h”的情况下使用它,当我尝试没有#include“stdafx.h”时,它说我可能遗漏了它。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-02-22 06:04:02

有一个次要的问题,我在答案的其他地方看不到:当使用预编译头文件时,比如stdafx.h,您需要首先包含它们。将其更改为:

代码语言:javascript
运行
复制
#include "stdafx.h"
#include <iostream>

这应该会修复它的错误。

或者,简单地关闭预编译头文件可能更容易:项目>属性>配置属性> C/C++ >预编译头文件>将第一选项切换到“不使用预编译头文件”。它们可能对大型项目很有用,但在你学习的时候会很笨拙和烦人,因为它们有额外的规则(比如“必须首先包含”),而这些规则不是标准C++的要求。

票数 7
EN

Stack Overflow用户

发布于 2010-02-21 13:32:53

不知道你在问什么。您给出的前两个示例是应该(将)用VC++编译的有效C++程序。第三个示例是必须使用/CLR编译器开关(称为托管C++)编译的C++/CLI程序。

编辑:添加更多具体信息(来自下面的评论):

前两个示例是标准的(本机) C++ (尽管第二个示例具有MS专有宏)。它们会编译成本机代码。第三种是C++/CLI (对C++的“托管”扩展)。它编译成托管(.NET)代码。只有第三个代码片段以任何方式与.NET框架交互。在VS2008中使用适当的项目(不需要命令行),这三个都是绝对可构建和可运行的!

根据您的最新更新,看起来您可能已经修改了一些项目属性并更改了一些路径。应用程序正在构建中,但当您尝试通过VS运行它时(顺便说一句,您应该使用<Ctrl>+F5执行此操作),找不到可执行文件(有几种方式可以通过更改或玩弄各种设置来搞砸它)。

请注意构建和运行之间的区别。构建是编译和链接源代码的过程。Running正在启动生成的可执行文件。您似乎混淆了这两者(从您对"...out of date“对话框的抱怨中判断出来)。如果您在对项目进行更改(即使更改已保存)后尝试运行而不重新生成,则会出现"...out of date“对话框,这是正常的。只要确保你点击“是”即可。在运行项目之前,您需要构建项目。

我的建议是完全删除您的项目和解决方案。创建一个新的空项目,就像在这个现在非常重要的线程中的其他地方建议的那样,并且不要修改任何项目设置。如果这不起作用,那一定是出了严重的问题!

另一个编辑:只是为了完成,因为这个问题一直在变化:

正如其他人已经指出的,第一个代码片段的最终问题是使用预编译头(PCH)。在新的VS C++项目中,默认情况下PCH是打开的。它们的目的是在许多实现文件包含相同的头文件集时加快编译速度--避免编译器必须为每个编译单元解析头文件。

您有三个选项:

  1. (推荐)禁用PCH --项目属性-->配置属性--> C/C++ -->预编译头:将创建/使用预编译头设置为不使用预编译头。(您不需要对"stdafx.h“文件或其#include做任何操作。)
  2. 将常用的#include放在"stdafx.h”中。在您的例子中,您应该在"stdafx.h".
  3. Place #includes中将#include <iostream>放在`#include“stdafx.h”之后。微软要求"stdafx.h“是编译单元中的第一个包含文件。
票数 19
EN

Stack Overflow用户

发布于 2010-02-21 16:42:27

“区别”是书生气的。后者就是Microsoft-specific entry points

在学习C++的过程中,我建议您使用编译器,最好是能够让您专注于C++而不是平台的操作系统。为此,我建议在Ubuntu这样的Linux发行版上使用g++

试试this tutorial,还有许多其他类似的工具,可以让你快速克服工具的束缚,专注于C++。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2304834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档