C++ IDE Improvements in Visual Studio 2013

C++ IDE Improvements in Visual Studio 2013

Rate This
  • Comments 27

When we considered what features to add to the C++ IDE in Visual Studio 2013, we decided to focus on improving the C++ code editing experience. We've added a number of features that will help you write and format your code more quickly, and will give you more useful information in IntelliSense. You can configure the behavior of most of these new features using the Options dialog from the Tools menu.

Code Formatting

One of my biggest frustrations with the C++ editor in Visual Studio over the past several years has been the lack of formatting when I pasted code into the editor. Combined with the lack of many common code formatting settings, this meant I spent quite a bit of time making my code look how I wanted, rather than actually writing new code.

In Visual Studio 2013 we added over 40 settings to help you control when and how your C/C++ code is formatted. We realize that there are many common formatting conventions for C/C++ code, so rather than dictate a single style of code formatting, we aim to give you the flexibility to adapt the settings to match your existing coding standards.

In some cases, we know that none of the options provided might be what you want. One particular example of this is controlling the exact position of opening curly braces for various block types. For these settings, we added an option to not apply a particular formatting rule so that you can control a particular aspect of your code formatting without needing to turn off formatting globally.

It's also possible to take advantage of code formatting without applying it automatically – simply go to the Text Editor -> C/C++ -> Formatting -> General page in the Options dialog, and uncheck all the boxes to turn off the auto-formatting behavior. You can then manually format your code using the Format Document and Format Selection commands from the Edit -> Advanced menu. This can be helpful if different areas of your codebase use different formatting standards, or if you need to make changes to 3rd party library code in your solution.

IntelliSense Improvements

We made some changes to Member List and Parameter Help so they provide more relevant information.

The Member List window now hides private members of types, except when you're editing code that defines the type.

The Parameter Help tooltip that appears when typing parameters of an overloaded function will now automatically switch to the best matching overload based on the number of parameters you've typed thus far. And it properly handles nested function calls – when you start typing a nested function call, Parameter Help will display results relevant to the nested call, then restore the contents of the tooltip to the outer function call when you close the argument list.

Small Changes that make a Big Difference

Have you ever used the "Go To Header File" command from the editor context menu? Now you can toggle back and forth between a header and its corresponding code file. There's even a default keyboard shortcut – Ctrl + K, Ctrl + O.

The editor can auto-generate event handlers in C++/CX and C++/CLI code files. You can choose to auto-generate just the delegate instance, or both the delegate instance and event handler function (both definition and declaration).

You may remember that In Visual Studio 2010, we changed Find All References to show just textual matches by default. You could have opted to have the compiler verify whether the textual results were actual matches.

We've changed Find All References to automatically resolve matches incrementally in the background after the textual matches are displayed – you don't have to resolve the references in order to get the information from the compiler.

We also added a toolbar to the Find Symbol Results window so it's easier to navigate the results and to stop resolution if desired.

And the Project Properties window is (finally) resizable.

Other Features

C++ developers can also take advantage of the improvements made to the common Visual Studio code editor, such as Peek Definition, Brace Completion, Enhanced Scrollbar, and updated Navigate To. You can learn more about these features in the Visual Studio blog post "Visual Studio 2013 New Editor Features".

Your Feedback Matters

One of the main reasons we ship preview releases of Visual Studio is to get your feedback and bug reports on new features and functionality, so we can fix the main issues before the RTM release. We regularly review bugs and other feedback reported via Connect and through the Visual Studio Send a Smile feature. As of this writing, the Visual Studio 2013 Preview has been available for about two months. Since that time we've fixed 14 bugs that you've reported (and several others we've found internally). Please keep on sending your feedback and reporting bugs. Even though we may not be able to fix every issue or respond to each piece of feedback, please know that we do read and consider all feedback we receive.

Wrap-up

For the complete list of Visual C++ IDE features in Visual Studio 2013, check out the What's New for Visual C++ in Visual Studio 2013 Preview page. And if there are features you'd like to see us add to the C++ IDE in future versions of Visual Studio, please vote for them on our UserVoice site.

  • Would be also nice if you looked into overloaded functions and pop-up information for arguments matching the correct overloaded function definition.

  • What's the point of asking about what features are needed? Here is a list of features present for a long time in VAX that might be implemented (and most of them I use all the time): www.wholetomato.com/.../default.asp, still with your actual speed of implementing features and patching issues in VS only from one version to another all above features will be present somewhere in VS2030, if not later, not saying that usually you make improvements overcomplicated and buggy. I think this improvements are good for Visual C++ Express as there can't be installed extensions, but for paid version your improvements are still far from completeness. Also I as understand all new features "that will have most votes on UserVote" will be in VS2014, that's means once again like with some C++11 features in VS2013 that weren't added to VS2012 the same will apply to current version as being stripped of features. I feel like Visual Studio now is made with DLCs, but you don't actually sell them instead you take current version, make some improvements, bundle DLCs (at same time preparing new DLCs... for next version) and sell it as a completely new version and again from the start telling users that "extremely useful feature xxx and feature yyy will be available in next version". Taking in count that Visual Studio is not a simple editor and it is pretty expensive is seems like you have taking the way of selling games applied to Visual Studio.

  • I'd like to second the suggestions from John Schroedl.

    Also:

    1) 'Add class' always seems a bit sluggish - I would love to 'Ctrl+A Ctrl+C', and a dialog quickly appears that allows me to type in the appropriate names, with a 'template' feature such that we could define what a new class looks like for us, including comments, etc, along with perhaps multiple templates (you could have a 'singleton' template, for example).

    2) Smarter placement of newly created files in a project; if all my headers are in an 'inc' filter, a newly created class would presumably put its header there as well, or something along those lines.

    3) Namespace resolution; if it's possible to determine that a particular symbol exists in exactly one namespace in a project, enable a key combination to auto-precede any such symbols with their namespace to allow for compilation (i.e., if I type `stringstream ss`, the given command would add the `std::` for me).

    4) When editing a project's configuration, optionally default the targets to 'all platforms'/'all configurations'; I've often been bitten when I forget to do this, and one configuration has an include directory missing from another

    5) Some sort of hint or autocomplete to help when using environment variables in a solution, in case I forget if a variable is $(Solution) or $(SolutionDir) when typing in an output directory, for example

  • I have to agree with the sentiments of @City17Citizen and others. Visual Studio lags far behind the refactoring, navigation and intellisense capabilities of Visual Assist, and it seems unlikely to ever catch up.

    Why not license some variation of VAX and bundle it with Visual Studio so that internal MS developers can focus their efforts on core product improvements? There's so much work that could be done to make the core product better... why expend those internal dev cycles chasing the features of Visual Assist?

  • While speaking about these nice and shiny improvements, please don't forget about such nuisances like still not having a proper Unicode Output Window in VS2012. Whatever OutputDebugStringW you use, whatever Unicode font you may use, the Output Window still shows "?"s for characters not present in the current ANSI code page.

  • Why don't you just buy/integrate visual assist + 1.

  • "Why don't you just buy/integrate visual assist + 1."

    Please, no.  I like it just where it is, with frequent bug fix and new feature releases, thank you.  

  • As per many of the other comments on here for me (Proper C++ aware) Refactoring is my number one wish.

    I do a little Java development from time to time Eclipse and IntelliJ Idea and whilst I'm a Visual C++ developer at heart I really really miss the great refactoring tools offered by both these Java IDEs.

    For me the core refactoring tools include Renaming (Variables, Classes, methods, types... everything) and extracting methods (With automatic parametrisation obviously).

    (FYI, I've tried Visual Assist and found it to be totally unusable for a project of the size I'm working on. Everything just becomes unusable slow despite me using a Core i7 based machine with 8Gb RAM.)

  • I would love to see refactoring!  Even rename alone would make me happy.  :)

  • Things in c++ /cli 2012 I'm going to try in 2013:

    Debugging speed. It takes an age to start up in a large 2012 solution, so I look forward to trying that out.

    Often, I'll have to have the watch windows empty and the auto/local windows hidden to aid performance.

    Intellisense non-existent

    Find all references basically does a search, but takes much longer than just searching for the method name yourself

    Thing's have improved in cs Class Library projects causing a full rebuild of the main c++ project in a solution. What causes a full rebuild is still a bit unclear.

    Being able to see the contents of a CString when debugging

  • +1 million to everything John Schroedl said. The most important to me would definitely be the "Implement un-implemented methods" which is a feature I love about Codelite.

  • ...one more major annoyance in 2012 and before:

    Unhandled exceptions in native c++ code get caught as an SEHException with all the information lost.

Page 2 of 2 (27 items) 12