Visual C++ 中缺少/所需的功能 [关闭]

Posted

技术标签:

【中文标题】Visual C++ 中缺少/所需的功能 [关闭]【英文标题】:Missing/desired features in Visual C++ [closed] 【发布时间】:2008-10-13 17:46:58 【问题描述】:

我找不到另一个已经被问到的主题,所以我开始了一个……如果有,请随意链接并关闭它。

您认为 Visual C++ 最缺少什么功能?

微软一直在为最近几个版本的 C#/VB.NET 开发添加不错的功能,但 C++ 感觉有点被忽视了。我在其他 IDE 方面没有太多经验,但在过去五年中,C++ IDE 开发一定有一些人们喜欢的进步。我很好奇人们认为 Visual C++ 缺少的最明显的功能是什么。

注意事项:

不,我不为 MS 工作,我只是经常使用他们的东西,希望看到它变得更好 这是针对原生 C++ 开发的,尽管我认为 C++/CLI 也应该是公平的游戏 随意添加多个功能作为单独的条目;这样人们就可以投票选出他们认为最缺乏的东西

【问题讨论】:

【参考方案1】:

重构。

【讨论】:

Visual Assist X 提供了相当不错的 C++ 重构,但它远不如 Resharper 或任何 Java IDE 提供的那样完整。 (众所周知,VS 附带的默认 C# 和 VB 重构打击...) 我不敢相信 Whole Tomato 将视觉辅助的价格提高到了 250 美元,这与 Visual Studio Standard 运行的差不多......【参考方案2】:

我似乎是地球上极少数使用它的人之一,但如果 Microsoft 能够在其编译器和 IDE 中正确实现关键字 andornot,我将非常高兴 -事实上,所有的 ISO 646,但只有这三个是真正有用的。

他们有很多“好”的借口不实施它们 - 不是一个破坏性错误,没有多少人使用它们,yadda yadda yadda - 但这是一件的事情,看起来很粗心他们中的一些人并不是出于恶意而实施它。

…对于不知道我在说什么的人:

// This is valid C++
bool x = not (a and b) or c;

// … and is equivalent to this:
bool x = ! (a && b) || c;

对于不立即支持上述代码但符合标准的编译器必须支持此代码的编译器,关键字也在标准头文件ciso646 中定义为宏。

【讨论】:

哇——这对我来说是新的。很酷的回答康拉德。赞成。 我可能在这方面与 MS 在一起:这似乎很容易在宏中完成,而不是硬编码到编译器中。不过,无论如何,这是一个供人们评估的好建议。 :) @Nick:标准说它们是关键字,因此嘿不能是宏。我个人不同意将它们作为关键字的必要性,但符合标准是一件好事。 @konrad:这正是我想要使用的。太糟糕了,他们还没有实现它。【参考方案3】:

这与 IDE 无关,但与语言有关。我希望 MS 至少支持一些 C99 更改。具体来说:

stdint.hinttypes.h。我有 我自己的版本,所以不是很大 为我处理,但 MS 真的应该 很久以前就放了这些。 他们完全不需要改变 给编译器。 在 C 中混合声明/代码和 inline。 他们已经为 C++ 做这件事了,为什么不让我用 C 做呢? _Pragma()。他们已经这样做了 非常相似的东西(_pragma() 我认为),但它已经足够不同了 它需要#ifdefs 才能工作。

【讨论】:

+1 for stdint.h,其他的,没那么多【参考方案4】:

如果在一行中存在多个表达式(由序列点分隔),则允许一次单步执行单个语句。示例:在 for 循环中,将初始化和比较作为两个单独的语句(在第一次传递)和比较和增量作为两个单独的语句(在后续传递)进行。

单步执行宏。

【讨论】:

确实如此。如果它们至少是函数调用,则 F11 进入语句。【参考方案5】:

既然我们在做梦……你提到了Template Meta Programming (TMP),如果有一个 TMP 调试器,那就太棒了;)

【讨论】:

【参考方案6】:

如果我在头文件中声明一组函数,只需单击一下,所有函数应该会自动展开到它的 .cpp 文件中。或相反亦然。我不确定是否已经有一个宏。

【讨论】:

同样,我希望它能够建议适当的头文件包含添加以修复选定的未定义符号。【参考方案7】:

自动生成代码、getter/setter 等,就像 IntelliJ IDEA for Java 一样。

编辑:还添加了 Visual Assist X 当前提供的几乎所有内容。这对于在 Visual C++ 中工作是绝对必要的。

【讨论】:

【参考方案8】:

如果 Intellisense 最终得到修复,那就太好了。当我右键单击代码窗口中的任何位置时,我的 VS 2008 冻结了 10 分钟以上。 C#/VB.NET 得到了所有 Intellisense 的喜爱——C++ 并非如此......

【讨论】:

【参考方案9】:

Visual C++ 编译器缺少对寄存器的支持 关键词。它只是忽略它。

在您的应用程序的热点中,重要的是 能够指导编译器做正确的事情。

或者正如詹姆斯普拉特所说:

“REGISTER 关键字被忽略。这对于生成快速代码至关重要,因为编译器并不总是选择正确的变量来保存在寄存器中。”

register关键字是一个可以被滥用的强大工具 并且会损害便携性,但我认为应该是 支持。

出于某种原因,Microsoft 不允许我们使用这种级别的 控制。主要论点是编译器更聪明 比软件工程师。这根本不是真的 案例。如果 Metroworks 使用相同的论据 PowerPC/Macintosh 的 C++ 编译器我不会 能够将我面向用户的应用程序加速 2 倍 (主要操作从 4 秒到 2 秒) 将重要变量分配给寄存器,消除 主存访问。只用了一个小时就完成了, 通过反汇编生成的代码和 消除内存访问。

【讨论】:

公平地说,您的论点是特定于编译器的,可能不适用于 MSVC 编译器。除非您有特定于 MSVC 编译器的反例,否则我会有点相信 MS;毕竟,在使用 MSVC 时,一些非常称职的软件工程师已经停止为他们的性能关键部分编写优化的程序集,因为(在他们的估计中)他们不能可靠地比编译器做得更好。 请注意,我并不是说您错了,或者您的建议无效,只是为证明其合理性而给出的示例并不特别适用,如果此功能您可能需要进一步调查真的会帮助你。 相同的代码也可以在 Windows 上运行,因此我可以编写 x86 汇编代码来尝试击败 MSCV 编译器。这应该相当简单,因为它只有 3 行 C 代码,可能还有 10 个 CPU 操作码。但自 ZX Spectrum/Z80 天以来,我还没有编写过汇编程序——Windows 上是否存在其他一些支持 register 关键字的 C++ 编译器?海合会? C 代码(bit_0 和 endpos 是循环中的常量 - 通常是数百次迭代): [ cv = pCharactVectorTable[*p++]; R = (((R>>1) | bit_0) & cv); if (R & endpos) ]【参考方案10】:

我认为 VC++ 迫切需要的一件事:

单步执行功能

通过未记录的 NativeDE 子键(谷歌子键名称以了解它)提供了一个跨步功能,这对于琐碎的构造函数/等非常有用。然而,随着 boost、TR1、COM 抽象和其他多步传递代码变得越来越普遍,VC++ 确实可以使用在调试器中自动单步执行函数的能力。请注意,这对于 C# 已经作为属性存在,但对于本机 C++ 恕我直言,它是必需的,并且作为文档化的受支持功能。

【讨论】:

为什么不在要单步执行的代码后面设置断点?【参考方案11】:

除了单步执行宏,我想知道是否有人认为最终编译器将需要支持单步执行模板扩展功能?随着元编程变得更加标准,模板变得更加复杂和编译时评估,这可能会成为一个问题。

【讨论】:

【参考方案12】:

我个人想要的另一件事是类图显示,就像 .NET 语言一样。我认为它肯定有助于可视化您尝试可视化的新代码项目。

【讨论】:

【参考方案13】:

想到了我个人想要的另一件事:

按名称中断函数的能力,无论它是从哪里调用的,也不管它是在哪里定义的。

破解代码中的函数很容易,但我经常发现自己想破解我没有源代码的函数(例如:OS API 函数),而且跟踪每个实例是不可行的在我的代码和调用函数的库代码中。 VS 具有中断函数的能力,但它似乎不适用于代码中没有的函数。

【讨论】:

【参考方案14】:

能够设置编译线程的优先级。

【讨论】:

以上是关于Visual C++ 中缺少/所需的功能 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

错误 - 未安装所需的框架 - Visual Studio C# [关闭]

关于如何在 C++ 中处理不同项目中的文件所需的课程

C++ Express 版缺少哪些 Visual Studio 2008 生产力功能?

为啥我的 Visual Studio 工具箱中缺少串行端口组件?

该项目缺少构建所需的 Android SDK

Laravel中缺少路由所需的参数[重复]