What Is The Best Tool To Use To Develop C++ On Windows?

The C++ Programming language is one of the most broadly used software programming languages. It can be downloaded from a wide range of locations with versions suitable for almost every possible operating system. This means users can easily develop applications for all sorts of different platforms. It’s very hard to specifically identify which C++ IDE is the best for you, as this is mostly about what you want to achieve with your code. If you want to implement small projects for analysis and calculations without GUIs and many other features, most small compilers might do just fine. Honestly though, trying to do everything with a simple text editor and a command line compiler really is “doing it the hard way“! However, if you want to migrate from building simple executable code to complex professional applications, we highly recommend starting with Community Editions which are often free to use so you can benefit from an advanced IDE right from the start and then progress to the full Pro or Enterprise editions when you’re ready to take things to the next level.

If you are looking to best IDE for UI Design and if you want to migrate from building simple executable code to complex professional applications, we highly recommend using C++ Builder for professionals and C++ Builder Community Edition so you can benefit from an advanced IDE right from the start. In this post we will explain why C++ Builder Editions are the best C++ IDE for UI Design. Maybe I should say that, for me, the best of the best is the C++ Builder Enterprise edition which has all features in feature matrix.

Embarcadero C++ Builder 11 is the Best C++ Tool and IDE that comes with the CLANG Compiler

This year, C++ Builder is celebrating its 25th anniversary. You can read more about the product history, on this great blog post by C++Builder PM David Millington on “Celebrating 25 Years of C++Builder” There is another very interesting blog post by David I on “The C++Builder 25th Anniversary: Visual Development, the Power of the C++ Language and 2.5 decades of Continuing Excellence“.

What Is The Best Tool To Use To Develop C++ On Windows? C++ Logo.

C++ Builder is the easiest and fastest C and C++ IDE for building simple or professional applications on the Windows, iOS & Android operating systems. It is also easy for beginners to learn with its wide range of samples, tutorials, help files, and LSP support for code. C++ Builder comes with Rapid Application Development Studio, also known as RAD Studio, and C++ Builder is one of the most professional IDEs that work under RAD Studio. It is the oldest IDE (it began as Borland TurboC in 1990 and was later renamed Borland C++ Builder). Under the Embarcadero brand, it comes with new versions, features, updates, and support. RAD Studio’s C++ Builder version comes with the award-winning VCL framework for high-performance native Windows apps and the powerful FireMonkey (FMX) framework for cross-platform UIs. There is a free C++ Builder Community Edition for students, beginners, and startups.

What Is The Best Tool To Use To Develop C++ On Windows? Teh RAD Studio IDE in light mode.
Welcome Screen of The RAD Studio 11.1 Patch 1

Here are the features of the current RAD Studio / C++ Builder 11 version.

  • Provision apps for Windows 11
  • Compile for Android API 30
  • Compile for M-series (Apple Silicon) processors
  • Design on high-DPI 4k+ screens
  • View VCL Styles in design time
  • New & modernized VCL components  
  • Use enhanced remote desktop support to collaborate remotely 
What Is The Best Tool To Use To Develop C++ On Windows? A collection of Windows 11 devices.
What Is The Best Tool To Use To Develop C++ On Windows? A summary of C++ features

The latest version RAD Studio 11.1 has customizable Welcome Screen with a colorful background. You can add your own images as a background which, to me, make it look an even more stunning and professional IDE: Here is the screenshot from the RAD Studio 11.1 Alexandria,

What Is The Best Tool To Use To Develop C++ On Windows? RAD Studio IDE in Dark Mode
Welcome Screen of The RAD Studio 11.1 Patch 1

Here are the main features of the RAD Studio / C++ Builder;

  • Build Windows and iOS C++ Applications 10x Faster with Less Code.
  • C++Builder Community Edition provides you with an integrated toolchain and professional-level developer tools from Day 1
  • Featuring Clang-enhanced compiler, Dinkumware standard library, MSBuild/CMake/Ninja support, and popular libraries like Boost and Eigen.
  • Develop Windows and iOS applications with a single codebase and responsive UI
  • Enjoy the award-winning Visual Designer using the C++Builder VCL and FireMonkey frameworks for maximum productivity
  • Built-in Debugging Tools that allow you to debug on any device
  • Build database apps with local/embedded capabilities
  • Hundreds of included components to enhance your app and reduce development cycles
  • Direct access to InterBase, SQLite, MySQL, SQL Server, Oracle, PostgreSQL, DB2, SQL Anywhere, Advantage DB, Firebird, Access, Informix, MongoDB, and more.
  • The Community Edition is licensed for use until your individual revenue from C++Builder applications or company revenue reaches $5,000 US or your development team expands to more than 5 developers
  • RAD Studio, C++Builder professional editions come with a lot of components and UI tools. You can prototype and implement your app’s visual design by making use of native widgets and platform-extending features, giving your customers an immersive, intuitive and familiar user experience.
  • A productive developer is a happy developer. RAD Studio allows you to develop easily, one-click or few-click settings, and advanced options, allowing you more and deeper details of professional programming.
  • A productive team makes happy management. C++Builder developers report they can deliver applications from concept to deployment 10x faster than with other tools – and getting to market that much faster means direct value to your company.
  • One part of the vast set of useful libraries we provide is FireDAC: an elegant, highly performant database layer. It provides data connectivity to 17 key databases, and over a hundred other data sources from Twitter to SAP through add-ons.
  • VCL and FMX frameworks include libraries built to make you more productive. For example, no C++ developer enjoys string manipulation using the STL’s std::string methods, or loading data in UTF-8 and converting to wide strings for Windows before modifying a string with the WinAPI. Let’s not even talk std::locale. RAD Studio provides powerful, useful classes for strings, conversions, file IO, streaming, JSON, REST, and anything else you need.

Embarcadero’s C++ Builder CE is a shared free C++ IDE and Compiler for the community of freelance developers, startups, students, and non-profits, C++Builder Community Edition is a full-featured IDE for building iOS and Windows apps from a single modern C++ codebase (limited commercial use license). C++Builder Community Edition includes a code editor, powerful debugging tools, built-in access to popular local databases with live data at design time, Bluetooth and IoT capabilities, and a visual UI designer with support for pixel-perfect, platform-specific styling.

Here are the features of the C++ Builder 11 version;

What is new in RAD Studio 11.1 IDE and editor?

1. General IDE Improvements

  • The “Start working” operation after the installation is completed effectively restarts the IDE, so that the first execution will be done with user permissions, instead of elevated permissions.
  • ‘Enable runtime themes’ is now turned on in the Base configuration of a project.
  • The ProjectRoot in a dproj/cbproj file should always sort consistently.
  • The IDE Wait dialog’s ToolsAPI interface has had some parameters renamed to better reflect their functionality
  • The ‘New Edit Window’ menu item is now disabled when a view does not support cloning. This includes the Welcome Page, which can’t be duplicated or dragged out to another window.
  • The Options > Saving and Desktop page has been split into two new pages:
    • Saving and Recovering (contains auto-recover and auto-save options)
    • Desktop and Layout (contains the remainder of the options.)
  • You can now change the colors used for errors, warnings and hints in the Messages view in the Options dialog. You can set different colors for each IDE theme, i.e. set different colors for light and dark or other themes.
What Is The Best Tool To Use To Develop C++ On Windows? The build log settings dialog
  • Embarcadero added Styling support to some minor dialogs used by the IDE, such as asking the user to confirm or warn about overwriting files, checking for Unicode project names, and using an invalid codepage.
  • The issue where a project file might have an inconsistent sort order in the deployed files, meaning it will change without its meaningful content changing is fixed.
  • The default C++ console app has been improved, and creating a console app is now a fast shortcut on the File > New (and Create New) menus for both C++ and Delphi.
  • A small number of items from the IDE Fix Pack have been integrated.
    • The IDE toolbars such as editing toolbars.
    • Missing scrollbars in the Options dialog pages.
    • Object Inspector rendering glitches.
    • The IDE and code editor went blank when debugging.
    • Special keys (such as Windows key) in the FMX form designer text input.
    • The list mode in the Projects view.
    • A variety of exceptions and many more.
  • The New Items dialog shows platforms for all items.
What Is The Best Tool To Use To Develop C++ On Windows? A build results dialog showing two errors
  • The New dialog where you can add items to your project hides items based on the project’s active platform.
  • The New dialog also supports multiple view styles, rather than just a vertical list (card, list, icons, and small icons.)
  • The New Items dialog now uses the TControlList VCL control, which improves scrolling.
  • The Compile dialog shows the platform and builds configuration and prioritizes Errors before Warnings and Hints.
What Is The Best Tool To Use To Develop C++ On Windows? The New Items dialog

2. IDE High DPI quality

  • Data modules now save the PixelsPerInch property when its value is 96, the default. This is also the case for VCL forms.
  • Dynamically created frames are now scaling correctly when designed in high DPI.

3. Welcome Page

  • The Welcome Page now supports background images. Selecting an image will scale it to fit the Welcome Page area. The aspect ratio is preserved, meaning the left/right or top/bottom sides of the image may be offscreen so long as the other axis fits the Welcome Page size.
  • There is a new page in the IDE Options dialog for Welcome Page settings, including the background (which can be set per theme) and closing it when opening a project. You can also access this page from the Layout Editor.
  • Welcome Page frames are now transparent by default. The wallpaper you set will be partially transparent through them. The transparency amount is one of the Welcome Page metrics available in the ToolsAPI.
  • Spacing between frames and the upper and lower edges of the Welcome Page has been very slightly tweaked.

4. ToolsAPI support!

The Welcome Page now has full support for creating Welcome Page frames using the ToolsAPI! Our own frames use the same API, meaning that anything our frames can do, yours also can.

We provide two Welcome Page demos showing simple and advanced usage, which are available on our public Github.

In its simplest form, you can create a TFrame descendant and display it with a caption. That frame can contain anything you want. However, we have more complex functionality that you can also make use of:

  • Frame captions can contain custom UI chrome (implemented via a second frame), as you can see for some of ours, such as the Open Recent frame (buttons) and Create frame (toggling between Delphi and C++)
  • Our frames use a MVC pattern, and load data in a background thread. You can use our own implementation, including using the same frame and list views that ours are built with. This means you can get the same behavior and look and feel without mimicking our setup, including in future if changes are made to the default layout, sizes, etc.

5. GetIt Dialog Improvements

  • The GetIt dialog box has been redesigned, maintaining a similar UI, but adopting a ControlList component for the list of packages. This has a noticeable effect on performance
  • RAD Studio now caches the package icons in GetIt, reducing the time for re-opening the dialog
  • There is a new option to ignore patches in GetIt, so you can skip the installation of a patch but stop the notification of the pending patch.

6. Both Delphi and C++ Compilers and Toolchains Improvements

ASLR, DEP/NX, and TSAWARE

In both Delphi and C++, the Windows linkers now offer better support for platform security configurations: For Delphi:

  • These features were already available as compiler/linker flags:
    • {$DYNAMICBASE} for ASLR
    • {$SetPEOptFlags $40} for DEP/NX or the matching ‑‑peflags option

For C++:

  • Use the -GE: linker option to turn these flags on or off:

For both Delphi and C++:

  • Enabling these settings is now the default
  • We build redistributable binaries (like package BPL files) with the security configurations enabled

Delphi Debugger for macOS ARM and Android

We have a new debugger when running macOS applications on an Apple ARM device. This debugger is not used if you are using an Intel machine.

This new debugger is a recent build of LLDB, and its key technology is a Delphi parser that understands a subset of Delphi syntax. (For example, it understands Delphi expressions, though you cannot define a new class. It should understand enough Delphi for all debugger expressions you need to use.) This syntax should be truly Delphi-like: case-insensitive, and able to evaluate complex expressions in Delphi syntax.

We have also enabled this debugger for Android 64-bit. This debugger is much less likely to cause ‘disconnected’ errors or freezes.

C++ Compiler and toolchain

  • The default constructor for UnicodeString is now no longer inline, which should help if you do not want to step into the constructor when debugging and invoking a function that returns a string.
  • AnsiStringT has the System:: namespace prefix
  • Many intrinsics headers (xmmintrin.h, etc.) should now be available
  • The C++ RTL has a breaking change this release, meaning that C++ libraries must be rebuilt in 11.1 (i.e., don’t link against object files or .lib-s built with 11.0.) This change relates to handling handles correctly for Win64. Some internal RTL structures were not widened in the past, resulting in possible handle truncation; they are now wide enough.
  • More intrinsics (e.g. SSE-AVX) are now shipped with our RTL.
  • System::DynamicArray contains some STL members for iteration, such as begin().
  • Several String functions that were in helpers in Delphi are now available from C++.
  • The IDE had an issue where the linking paths meant that the linker would find the classic debug libraries (if provided) before the clang release binaries. This means that if you delivered debug builds of your component or library and supported both compilers, then your customers would end up linking against the version from the wrong compilers. It has now been resolved.
  • A wide variety of compiler bugs in the debugger (especially Win64) and debug info have been improved; using a TDS file in release mode; tweaks to locale, and many other RTL and STL areas; lots of improvements to import libraries; fixes to coff2omf for the generated OMF libraries, etc.

7. LSP Improvements (Delphi and C++)

Delphi LSP

  • DelphiLSP has a significant focus on quality and speed, and 11.1 brings some considerable performance improvements.
  • The key change is that the new higher performance work applies to all project types including packages.
  • Exception info is displayed again in Help Insight.
  • Line number information is now available in HelpInsight for arrays and sets
  • Pressing Ctrl-Shift-Down inside an inactive macro/ifdef jumped to the implementation of the next method declared
  • Ctrl-click navigation now works with aliased generic types. For example, if IntArray is a TArray, control-clicking on IntArray will take you to the location with the TArray type declaration, not to the location of TArray<> in System.pas.
  • An issue where ctrl-shift-up/down navigation did not work correctly when there were include directives in the unit has been fixed
  • Error Insight did not work when the project was using files that were located on a different drive to the project
  • Normal projects will now load much faster. The technique we use to load a project has been significantly changed with much less parsed, and DelphiLSP should finish loading a project and respond to requests much more quickly.
  • Error Insight results will now update much more quickly. You can expect a 5 to 30x speed increase here as well. The most dramatic improvement is seen for units with many dependencies (lots of other units used.)

Other improvements include:

  • Better handling of macros (defines) so that toggling between the implementation and declaration of a method works better when there are IFDEFs, as will code completion in class declarations.
  • Macros (defines) will also be found if they are declared in an included file, affecting the above.
  • When declaring a property, code completion will suggest getters and setters.
  • Code completion will show set types.
  • Type parameters will be shown in code completion in a class declaration, including generic types (e.g., T) in a generic declaration.
  • Parameter tooltips/help can be shown when instantiating generic types.
  • Code completion showed some TObject-specific completions, like AfterConstruction, when completing inside a record declaration; this has been resolved.

C++ LSP and cquery

What Is The Best Tool To Use To Develop C++ On Windows? LSP Options

In the new LSP Behavior tab, we have two options that control how the cquery LSP server indexes files, which is how it stores the info it uses to fulfill code completion, navigation, etc. Restart server each time a project is activated and Index only files that are opened in the editor.Note: Indexing can be very CPU intensive and you usually cannot use Code Insight until it’s complete. Note that restarting the server, such as when platforms are changed, also clears the index.

Other improvements include:

  • Code completion items are displayed in the order that cquery returns them, which is scope order, unless you turn on Alpha Sort (off by default.)
  • Indexing should be on by default in the Project Options for all C++ projects.
  • You can now code complete in header files that are not directly part of the project (e.g., not part of a cpp/header unit pair.)
  • Changing project options or the active platform will restart the server to match the new project settings.
  • The server now knows when a file has been saved and will update correctly. This is important for new files, because in this build Code Insight won’t function until the file exists on disk.

Other C++ features:

  • The IDE waits correctly until the server is ready.
  • You can code complete in a project’s main source file.

Performance Improvements

  • Code completion displays in two seconds or less, no matter the size of the project. Note that when invoking code completion in the global scope with a VCL project, there are over eighty thousand items returned.

8. Libraries Improvements

To help sharing code among projects build with FMX and VCL, we added framework specific predefined symbols:

  • FRAMEWORK_VCL – this predefined variable is set to true if the project uses the VCL framework
  • FRAMEWORK_FMX – this predefined variable is set to true if the project uses the FireMonkey (FMX) framework

Delphi RTL

Optimization Work

  • In terms of Delphi RTL we did some work in terms of performance optimization.
  • We also included improvements to _CopyArray, _IntToStr64, _IntToStr32, InitInstance, InvokeRecordInitializer, _FinalizeRecord, _UStrAsg (including purepascal version), _LStrAsg, _LStrLAsg, AnsiLowerCase / AnsiUpperCase, and TStringHelper.IndexOf.

New TURLStream class

  • There is a new stream class, TURLStream, and a general base class: TAsyncStream is a new base class for async streams, inherited from TMemoryStream; TURLStream is an async stream supporting URL paths, inherited from TAsyncStream.
  • TAsyncStream.Create starts APopulate in the background thread. Until it is finished, any TStream methods call on TAsyncStream will be blocked. An application can:
    • Use IAsyncResult to wait/check TAsyncStream population completion. TAsyncStream supports IAsyncResult.
    • Provide AProvide anonymous method, which is called when the population is finished.
  • TURLStream constructor extends the base class constructor, and it is declared as follows:

constructor TURLStream.Create(const AURL: string;

  • TURLStream inherits the behavior of the TAsyncStream base class, but internally it uses THttpClient or TFileStream, depending on the URL schema.
  • TAsyncStream defines the following public methods: Destroy, AfterConstruction, Read, Write, Seek, SetSize(Int64), SetSize(Longint), SaveToStream.
  • TURLStream defines the following public methods: Destroy, RegisterSyncReqExexcutor, UnRegisterSyncReqExecutor.

Additional RTL Improvements

  • Support for Windows 11 and Server 2022 in the TOSVersion data structure
  • TURI.ToString takes the port into consideration
  • TMetaFile can now load from a large stream

TMemIniFile and duplicate sections

  • TIniFile was modified to offer better compatibility with the pre-10.3 behavior in case of duplicated sections.

VCL

We primarily addressed issues related to recent features, like enhanced TTreeView, TRichEdit, TEdgeBrowser, and TNumberBox.

FireMonkey

Improved Android SDK integration

  • We removed dependencies to the android.bat file tool in favor of advmanager and updated the IDe SDK Manager dialog for the Android platform.
  • The DEX compilation and DEX merging are now deferred after the C++/Delphi linking, making compilation without deployment faster.
  • For the Android platform core integration, we added support for Delphi classes that implement Java interfaces with method overloads. This helps address an issue with Android 12 and sensor access (fixing the SensorInfo demo).
  • Delphi classes that implement Java interfaces can now have functions that return Int8, Int16, Int64, Float32 and Float64 values.

TWebBrowser

  • Improvements to TWebBrowser on Windows (with WebView 2 support), including the ability to change the Windows Engine more than once. The default value of the WindowsEngine property has been changed.
  • The team also addressed resizing and transparency issues with the control. There is also improved WebBrowser ability to work with local files on mobile.

Additional FMX Quality

  • Addressed several Windows HighDPI-related issues.
  • Improved performance of TMessageManager.Unsubscribe.
  • Added Undo to TMemo context menu and addressed the issues with automatic content scrolling.
  • Emoji color improvements for both Android and iOS.
  • Improvements of the Metal GPU driver support on the macOS platform.

9. Database Improvements

General

  • We made the Field Link Designer pane and New Field Dialog larger and more usable.
  • In order to support Firebird 4 long field names (up to 63 characters), the 31-char limit in the field name in the database RTL has been removed.

FireDAC

  • Implemented Structure View support for FireDAC. Also some of the FireDAC windows offer better High DPI support.
  • Added support for MariaDB 10.6 server with a 10.6 client
  • Added support for SQLite SEE, offering a command line Batch to build SQLite OBJs with C++Builder for FireDAC static binding. The readme file sqlite_see.txt explains the process (this feature was already available for RAD Studio 11.0 via a GetIt plugin).
  • FireDAC improves Firebird 4 driver by providing support for additional data types:
    • INT128
    • NUMERIC with precision 19..38
    • TIME WITH TIME ZONE, TIMESTAMP WITH TIME ZONE (limited)
    • DECFLOAT(16/34)
    • Native statement timeout
  • FireDAC adds support for FireBird 4 pagesize 32768.

10. Other Internet Related Improvements

WebBroker on Android

  • The WebBroker server applications can now be deployed on an Android device or a developer board (like a RaspBerry Pi running the Android OS). Both on Android 32-bit and 64-bit.

DataSnap

  • We extended the Web.Win.ISAPIThreadPool to allow more than 64 threads. The NumberOfThreads variable type has been changed to Cardinal. The ShutdownTimeout variable (a timeout in milliseconds, which thread pool will wait to finalize all worker threads) has a default value of 2 minutes.

RAD Server

  • Some database structure improvements and provided new matching REST SysAdmin endpoints:
    • GET /sysadmin/log – returns info about LOG table content.
    • POST /sysadmin/log?minTime= – deletes all records from LOG table older than specified date/time.
    • DELETE /sysadmin/log – deletes all records from the LOG table.
    • GET /sysadmin/backup?backupFile= – creates a specified backup file of emsserver.ib database. The backup file will be on the InterBase server.
    • POST /sysadmin/backup?backupFile= – restores the emsserver.ib database from the specified backup file. The backup file will be on the InterBase server.
    • GET /sysadmin/validate – performs emsserver.ib database validation and returns the database status.
  • Allow RAD Server users to log in from more than one session simultaneously
  • New deployment feature for RSLite
    • Option in EMS.INI to pick a specific Interbase client library (for embedded or regular DB), with the ClientLib entry in the Data section.
    • There is now a ready-to-use deployment feature for RSLite

Others

  • Added an option to select a client-side certificate in the REST Debugger.
  • The REST Debugger is now DPI-aware.
  • The TCustomRESTRequest class has a new BodyCodePage property, which specifies the request body code page. Some special values are:
    • -1 (the default value) – use the platform default encoding
    • 0 – current active code page
    • 65001 – UTF8.
  • Support switching the region in AmazonAPI

Official features of the latest RAD Studio C++ Builder 11.1 can be found here : https://docwiki.embarcadero.com/RADStudio/Alexandria/en/What%27s_New

Why use RAD Studio 11?

RAD Studio 11 comes with a lot of new features as listed above. There were some important issues and they released a new update called RAD Studio 11.1. This update had many bug fixes, it had some important issues on the C++ side. In few weeks, they released a new patch which fixes C++ Builder LSP features and some other issues. Thus, RAD Studio / C++ Builder 11.1 Alexandria – Patch 1 is the best IDE and compiler version. If you have any earlier version, we highly recommend you update to this version.

Here are some official posts about RADS 11.1 and 11.1 – Patch 1 versions

Where To Download?

You can download the free C++ Builder Community Edition here: https://www.embarcadero.com/products/cbuilder/starter.
Professional developers can use the Professional, Architect or Enterprise versions of C++ Builder. Please visit https://www.embarcadero.com/products/cbuilder.

See What’s New in RAD Studio 11

Download RAD Studio 11 Now


Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition