C++ Programming tools - c++

My teacher recommended us to use notepad++ and cygwin for our programming needs. Are there any better solutions anyone can recommend out there to program and compile?

Myriad of various IDE's.... Eclipse CDT, Visual Studio Express, Code::Blocks, DevCPP....
And yes, Notepad++ and Cygwin with gcc would be a very viable option if you only need to compile single files for your homework.

Use a IDE
An integrated development environment (IDE) (also known as integrated design environment, integrated debugging environment or interactive development environment) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of:
a source code editor
a compiler and/or an interpreter
build automation tools
a debugger
A few of them to choose from
http://netbeans.org/index.html
http://www.codeblocks.org/
http://www.eclipse.org/cdt/

In my opinion, a very important tool for beginners is a debugger. A lot of question can be answered by yourself if you have a look into the debugger. You can use the gdb but it is hard to use and understand for beginners. So I would recommend to use Visual C++ 2010 Express which has an excellent and easy to use debugger.

Disclaimer:
The following are personal opinions, related to my personal taste on
the subject. Anyone in the programmer community has its own taste and
preferences an can agree or not. Here I just want to tell you about
some rationals. Consider products and related names as "examples."
My Answer
There are mainly three ways to write code:
The manual one
The assisted one
The automated one.
Think to them as:
Driving your car alone
Driving with a navigator
Driving with an autopilot.
Here "driving alone" means "use a generic text editor, a command-line based compiler and a command-line based debugger. The editor may eventually have a clue about the language syntax (thus differentiating different language structural elements, like keyword, literals, operators etc.) but knowing really nothing about what you are coding.
This is what notepad++ does. It makes coding harder, but for very simple things makes you really learn how to "drive".
A "navigator" is a basic IDE like Devc++, or like CodeBlocks: they have the notion of "project", manage the relation between files and manage the invocation of the compiler and debugger, managing the mapping on their output respect to your sources.
You write your own code, but the "road to compile" is told by the "navigator" you have to trust.
An "autopilot" is a more complex IDE (like VisualStudio, Netbeans, Eclipse ...) that can also "manage the code" providing code analysis for either syntax and semantics, context sensitive auto-completion, code generation for common tasks.
They can give you some code you have to complete and connect together.
They make you faster in producing code, testing it, debugging it, but you must have more trust in them or know how they "suggest".
They can be productive, but you have to "configure" them to suite your needs.
Now: since everything is a matter of "trust", and you cannot trust what you don't know yet, and is a matter of "knowing yuur needs" (but a learner may not yet have an idea abut them)
starting with "beasts" like VisualStudio (that mess arout 50% of your computer registry, pretend you to download GIGABYTES from the Internet and installs GIGABYTES of whatever MS library) is clueless: before you will start using all of that, will take years, and VS itself will be changed 2 or three times) or Eclipse (that has the more powerful syntax and semantic analizer, but requires lot of "arcane configuration" you don't even know since you didn't make the first step in programming) may be an excess. At least until your programs will stay in a couple of pages.
starting win notepad++ and GCC (or Mingw) is just a matter of dowload few megabytes, set a PATH, and you go. Fastest way to turn the key on.
when things become more complex, and require some help in organize them, simple IDE like CodeBloks or Codelite are more than effective at "to the point". I will avoid Dev-C++: it's OLD, and doesn't support the "state of art of the C++ language". You an live with them for all your scolarity
when going to more professional kind of projects, and your experience in "using tools" is better, things like Eclipse, or NetBeans may become more "effective". I will in any case avoid VisualStudio: it's not that "effective". But it is the best to develop in Microsoft environments producing MS oriented applications, especially in the ".Net" world. Something you will not see before 2/3 years of experience.

If you're learning you can download VStudio Express. I believe it's free. Easier to use than notepad and cygwin. This isn't a biased opinion. I'm a Linux C++ developer most days but acknowledge the fact that it might be easier to learn using VStudio.

If you are using linux, you can use kate and g++ for editing and compiling c++ files.
If you are using windows, I think your teacher's recommendations are good. Althought there are various IDE's for C++, it is better to use a simple editor that doesn't have code completion and compilation feature while learning a programming language for the first time. IDE's are nice but not good for learners I think.

It's probably a good idea to go with your teacher's suggestion, since you might also need some help in the future, either from him or your colleagues. Another advantage is that, being in school, you'll probably develop using more than one programming language. Notepad++ has support for almost everything you can think of, so you can use it not only for this course. That way you'll have an advantage because you'll learn shortcuts, etc...

If you plan on doing a lot of programming in the future, I highly recommend putting the effort into learning VIM. Nothing else can touch it in terms of speed and power. It has built-in shell access and it is programmable. It is like having God in your text editor. The major down-side is the steep learning curve.
Also, you want to use Git in-case you screw-up and want to go back to a previous point. It lets you periodically check-point your code so you can always go back. For example, maybe you delete something, then later on decide you want to use that code after all. If you've been check-pointing with Git, you can get it back.
Graphical differs sometimes come in handy too.

I started coding in C++ using Turbo C++(the default program available on college computers, I told them it was prehistoric), but then I found Visual Studio Express and never looked back since that day.
Also since i could not install Visual Studio on College computers, I put a portable version of DevC++ on my pen drive to use there.
Eventually I got the College to install Visual Studio Express editions on all Lab Computers (Once I managed to convince them that it was free with no Licensing issues)

For a beginner, go with a text editor and a compiler. Helps you in understanding what actually goes on.

You could use Dev-C++, which is a good compiler for C and C++, if you want lightweight.
Otherwise Visual Studio probably.

Related

Is it worth learning Eclipse for C++ development

As far as I know it is hard to learn using Eclipse from scratch. But I will get such benefits as fast source code browsing, call graphs, static code analysis. What other benefits will I get from using Eclipse for C++ (CDT)?
I learned Eclipse for C++. It is flexible and offers many features. I no longer use it for C++.
What I found is that CDT feels like an "add on" rather than an intrinsically supported environment. Perhaps because it is an add on. Eclipse is written in and primarily supports Java development.
It was also rather buggy at the time but that was two years ago. I think today's CDT is probably more refined.
Lastly, it took a long time to start and some editing operations were rather slow. I was able to find a vi plugin for it, but it wasn't free and wasn't a perfect emulation.
Today I use a commercial editor that is fast and doesn't feel like it is out of its element. I would encourage you to try Eclipse and see for yourself if it meets your needs.
I used Eclipse with C++ only for a short time, and rather I could use Eclipse with Java for some months. Now that I'm not using it, I feel that some important features are missing.
Eclipse is pretty heavy, but has some great features that I can't find easily somewhere else.
I can live without code analysis and project management (for small projects), but some features about source code navigation and refactoring are really unique and I really miss them.
IMHO, Eclipse is worth learning, even if it won't become your default IDE.
If you don't want the giant size and lethargic performance of Eclipse, try Code::Blocks, which is a cross-platform C++ IDE actually written in C++. They have just released a spanking new version (10.05).
I've been using Eclipse now for more than 6 years and I couldn't find a (free) IDE which has so many features.
I neside the obvious ones (automatic build, syntax highlighting, indexing of function etc)
you have the plugins.
You are working with a versioning system? No need to learn the command line commands. Just use the appropriate Eclipse Plugin (SVN, C++).
You are using a testing framework? CUTE and ECUT provide you with macros to create the test suites and summarise their results.
Another nice bonus: Eclipse is available for Windows/Linux/OS X although it is slightly superior on Linux (due to the easy availability of other tools)
If Eclipse still does not have keyboard macros I wouldn't touch it with a ten foot poll for development with any language. Better to use vim or emacs IMO, or better yet emacs in viper-mode. :)
Some Points which should be true for most IDEs:
automated generation of build scripts
highligting of compiler errors and warnings in the source
integration with source control svn, git, ... (subversion, egit, ...)
code completion
debugging
other things (plugins)
Eclipse against other IDEs:
Platform independent
Free with complete functionality
I'd say that it is worth the effort to learn it.
Eclipse for C++ isn't as good as for Java, but it still beats not having any IDE.
F3 and Ctrl-Space is a good enough reason to leave any plain text editor behind.
Learning an IDE isn't a waste of your time at all. Try Eclipse, Visual Studio (if you're on that platform), Netbeans and anything you can think of. You might find something you really like.
Edit: Since you specify that you're on Windows, I'd say try out the free Visual Studio version. From my (limited) experience, it feels better suited for c++ on that platform.
It can help make cross-platform development (for Windows and Linux) a lot easier.
Very much depends on what you do.
If you need to work on shared projects that use Eclipse => learn it.
If you just write 10 or 100 lines of code altogether => use text editor.
If you just started coding, go for an IDE that works best for you. This can be Eclipse, but it could be Visual Studio on Windows or Xcode on Mac, especially given the choice of language.
For quite small projects, you can also get away with good editors that support syntax highlighting. Although a complete IDE makes editing, compiling and debugging much easier.
My choice is Xcode on Mac, Visual Studio on Windows. Eclipse only for Java for me on any platform.
Let me be very presumptuous for a moment and tell you what you really want.
You do not want to learn an IDE.
What you want is an easy and efficient tool, that will seamlessly assist you in writing c++ code. C++ is already difficult enough, ideally you should concentrate on it and forget about the IDE.
My advice. Let VI and Emacs to the dinosaurs. If you're on windows go for Visual Studio (the Express edition is freely available for personal use), otherwise Eclipse and Code::Blocks are good choices.
I rarely use an IDE. It is much easier and faster to use a good text editor (VEDIT) and then use make for building. Of course, you can call compilers, make, debugger etc. directly from VEDIT, then browse errors etc.
I have tried Eclipse a few times. The first thing I noticed is that it is really heavy. Cold start takes about 2 minutes on my machine, and subsequent starts around 20 to 30 seconds. (In comparison, with VEDIT, cold start is 1.5 seconds and any subsequent starts about 0.5 seconds.) The UI of Eclipse has lots of unnecessary clutter on screen, so there is not so much room for the code being edited. Eclipse can not edit files larger than a few megabytes, so you need another editor for editing large log files, memory dumps etc. anyway.
A good programmers editor does have fast source code browsing, function lists, call graphs etc, you do not need an IDE for that. The tools for static analysis (such as Lint, Klockworks etc.) are separate tools anyway, but you can call them from a text editor just as well as from IDE. Text editor can be integrated to version control, too (but you may need to do some configuration work yourself).
The advantage of a general purpose text editor is that you can use the same tool for all your text editing, so you will learn to use it effectively.
What is special about IDE is that it is usually more tightly coupled to some specific language. For example, it may contain full on-line help and code completion for the language library, API functions etc. Those may be useful to someone.
To my mind it is worth to learn Eclipse. Or just try it. It is widespread development environment. I saw various fields where Eclipse or IDEs based on it used from embedded development to mobile development.

Learning C++ without an IDE

I've recently started to learn C++ and am completely confused with the choices of IDEs and compilers out there. I am competent with interpreted languages and like the simplicity of using any IDE or text editor and then running the interpreter from the command line. Everything works as I expect, regardless of the IDE used, because I use the same interpreter each time.
Now that I have started learning C++ I am overwhelmed by the choice of different compilers and more importantly, their differences. It seems that things will be simpler for me (not necessarily easier) if, while learning, I use a text editor and a compiler that I run from the command line. I have a basic understanding of how compiling and linking works and I understand the role of header files.
Firstly, are there any books or websites that teach C++ from this approach? (IDE-less)
Many books try to point out the differences between IDEs and compilers by selecting two and comparing them, which confuses me.
Secondly, how should I set up my workflow? (Ignore the choice of text editor, I am talking about compilers, linkers etc.) I am struggling to understand what differences different compilers have and so please bear this in mind when answering. It seems like the most popular compilers are g++ and CL.
Similar question but I am more interested in why some programs will work with some compilers and not others: C++ Compiler for Windows without IDE?
Further information: I am developing on Windows and from what I understand, it seems that there is 'pure' C++ and then C++ that is somehow related to windows, is this Visual C++? I would like to write programs that make use of Windows features but I want to know when I am using windows features and when I am writting code that would work on any platform.
Update: So it seems that I shouldn't be worrying about compilers when I am just starting out. The reason for me wanting to understand the differences is because I don't want to write code for a specific compiler and get into bad habits. Is this a non-issue?
Firstly, are there any books or websites that teach C++ from this approach? (IDE-less)
Yes, definitely. Stroustrup's book has already been mentioned. For learning C++ I'd also recommend two other books: If you like thorough explanations and don't shy away from 1000 pages, look at Lippman et al. If you rather like a short introduction and don't fear a steep learning curve, look at Koenig/Moo. Both are excellent books. (BTW, a good place to look for good books has always been the book review section at the ACCU.)
As for which tool chain you want to use: If you rather have a standalone editor and invoke the compiler from the command line, you can do this with either GCC or VC. This approach has the advantage that it is more unlikely to lure you into using something proprietary (like C++/CLI). If you would like to try an IDE, VC Express is fine, once you're past setting up a new C++ project. Of course, the number of options you can tweak for a new project can be very overwhelming. But on the other hand you get things like an integrated debugger. Note that there are other integrated solutions, too. The most mature and prominent is probably eclipse.
Edit: If you don't mind spending a little money, look at Comeau. It's not free, but it's not expensive either and it's usually considered to be the most standard-conforming C++ compiler around and has excellent error messages. (You can test-drive it at the website.) Note that it emits C code, though. That means you have to have another compiler to create an executable program. But both GCC and VC Express will do, so there's no other cost. (Note that using VC you will get Dinkumware's std lib implementation, which is also considered to be a very good one.)
Use MinGW - it's a command-line C++ development toolchain that allows you create Windows applications. The SO link you quoted seems to have all the relevant details, so I don't really understand why you posted this question.
Firstly, are there any books or websites that teach C++ from this approach? (IDE-less)
Start from reading The C++ Programming Language book. Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.
Take a look also at Programming — Principles and Practice Using C++. It is an introduction to programming for people who has never programmed before. It will also be useful for people who have programmed a bit and want to improve their style and technique - or simply learn modern C++.
I am developing on Windows and from
what I understand, it seems that there
is 'pure' C++ and then C++ that is
somehow related to windows, is this
Visual C++? I would like to write
programs that make use of Windows
features but I want to know when I am
using windows features and when I am
writting code that would work on any
platform.
MS Visual C++ 2008 Express is a free IDE aimed at folks like you, it's available by download from Microsoft, I recommend you try it out.
Visual C++ is the name of the IDE program package. Installing it installs many things including the compiler cl.exe, which can compile, depending on settings, program written in either the C, C++, or C++/CLI programming language (for the .Net framework).
You can use the compiler on the command prompt without the IDE by (for example) selecting Start > Programs > Microsoft Visual Studio X > Visual Studio Tools > Visual Studio X Command Prompt. This execute a script which sets various environment settings needed to compile programs before giving you the command prompt.
On Windows I'd recommend you Visual Studio Express - it's free and is widely accepted by C++ programmers on Windows platform.
Since you're starting to learn language, don't bother yourself with differences, advantages/disadvantages of compilers and IDEs - leave it when you'll be more proficient with the language and will be involved in writing real program.
I actually suggest IDE approach, Microsoft Visual C++ Express Edition should do the trick. Excluding some fancy syntax most C++ compilers behave the same way. C++ is a language that has a very small standard library (covering mostly I/O functions, basic math etc..) this is probably what you refer as pure C++. For something more advanced you'll have to use system libraries.. In example if you want to write windows gui application you'll have to include windows.h header file which is platform specific and exists only on windows compilers..
If you won't use an IDE, you definitely want to use Makefiles to organize your workflow... and you can make easily from emacs or vim.
Anyway, may I suggest you to use a very simple, almost non intrusive IDE, that could be great for learning purposes: http://www.bloodshed.net/devcpp.html
It comes with the MinGW compiler bundled, so it's just install and go.
I'd say to start out with Visual Studio. This is a great IDE for programming C++ on windows, might as well use it when it can speed up certain things a lot.
The differences between compilers aren't that huge - if you can write solid code in VS then it shouldn't be a problem to figure out how to get your code working in GCC/G++.
As for books; Exceptional C++ by Herb Sutter and The C++ Programming Language by Bjarne Stroustrup are a great read.
Visual Studio is the way to go when developing for Windows.

Why is Visual C++ lacking refactor functionality?

When programming in C++ in Visual Studio 2008, why is there no functionality like that seen in the refactor menu when using C#?
I use Rename constantly and you really miss it when it's not there. I'm sure you can get plugins that offer this, but why isn't it integrated in to the IDE when using C++? Is this due to some gotcha in the way that C++ must be parsed?
The syntax and semantics of C++ make it incredibly difficult to correctly implement refactoring functionality. It's possible to implement something relatively simple to cover 90% of the cases, but in the remaining 10% of cases that simple solution will horribly break your code by changing things you never wanted to change.
Read http://yosefk.com/c++fqa/defective.html#defect-8 for a brief discussion of the difficulties that any refactoring code in C++ has to deal with.
Microsoft has evidently decided to punt on this particular feature for C++, leaving it up to third-party developers to do what they can.
I'm not sure why it is like this, but third-party tools exist that help. For example, right now I'm evaluating Visual Assist X (by Whole Tomato). We're also using Visual Studio 2005.
devexpress provides Add-in Refactor! for C++ for VS2005 and VS2008.
Don't feel hard-done-by, it isn't available in VB.Net either :)
C++ is a HARD language to parse compared with C# (VB too unless you've "Option Explicit" and "Option Strict" switched on, it's difficult to tell exactly what any line of code is doing out of a MUCH larger context).
At a guess it could have something to do with the "difficulty" of providing it.
P.S. I marked my answer as community wiki because I know it's not providing any useful information.
Eclipse does few c++ refactorings including 'rename'. Check out this question here on StackOverflow.
It is also possible to use Microsoft compiler with Eclipse. Check out here.
Try Eclipse and see if it fits for you.
There is a lot of fud and confusion around this issue. This amazing youtube video should clear up why C++ refactoring is hard: https://www.youtube.com/watch?v=mVbDzTM21BQ
tl;dr Google refactors their entire 100 million line C++ codebase by using a compiler (Clang + LLVM) that allows access to its intermediate format.
Bottom line, third parties are screwed here, there is no realistic way for them to refactor VS C++ unless MS outputs intermediate results the same way. If you think of it from the programming problem perspective this is obvious: in order to refactor VS C++ you have to be able to compile C++ the exact same way VS does with the same bugs, limitations, flaws, hacks, shortcuts, workarounds, etc. The usual suspects like Coderush and Resharper do not have the budget for that kind of insanity although apparently they are trying but it has been years...
http://www.jetbrains.com/resharper-cpp/
Update 2016: Resharper now does a decent job at C++ refactor. Limitations are purely for large / gigantic projects.
MS has finally done this: https://channel9.msdn.com/Shows/C9-GoingNative/GoingNative-33-C-Refactoring-in-Visual-Studio-2015#time=04m37s
They have started doing this about 10 years ago, I remember watching ms channel9 long ago.
I've been using Visual Assist X with visual studio for about one year and a half. It's an incredible tool that helps you a lot with ordinary C++ code, but it doesn't perform very well on templated code. For instance, you if have a sophisticated policy-based template design, it won't know how to rename your variables, and the project won't compile anymore.
Install plugin which enables you that functionality: https://visualstudiogallery.msdn.microsoft.com/164904b2-3b47-417f-9b6b-fdd35757d194
I'd like to point out that Qt Creator (a C++ IDE which is compatible with VC++ libraries and build system) provides symbol renaming that works very well:
You can rename symbols in all files in a project. When you rename a class, you can also change filenames that match the class name.
Qt Creator - Refactoring: Renaming Symbols
Qt Creator's rename functionality gives you a list of the symbol references it found and an opportunity to exclude any of them before performing the replace. So if it gets a symbol reference wrong, you can exclude it.
So C++ symbol renaming is possible. Coming to VS from Qt Creator I feel your pain, to the point where I've considered converting preexisting VS projects of considerable size to use Qt Creator instead.
I don't buy the argument that this is specifically hard in C++. In addition to the fact that it already works very well in Qt Creator, there's the fact that the compiler and linker can find and match symbols: If that wasn't possible you couldn't build your application.
In fact, languages like Python that are dynamically typed also have renaming tools. If you can create such a tool for a language where there are no explicit references to variable type you can definitely do it for C++.
Case in point:
... Rope, a python refactoring library... I tried it for a few renames, and that definitely worked as expected.
Stack Overflow - What refactoring tools do you use for Python?
Well in spite of comments by all you experts I totally disagree that refactoring support issue has something to do with C++ language semantics or any language semantics for that matter. Except the compiler builder themselves don't choose to implement one in first case due to their own reasons or constraints whatsoever they maybe.
And offense not to be taken but I am sorry to say Mr jsb the above link you provided to support your case (i.e of yosefk) about C++ defect is totally out of question. Its more like you providing direction to "Los angeles" when someone asked for of "San Franisco".
In my opinion raising refactoring difficulty issue for certain language is more like raising a finger on language integrity itself. Especially for languages which is sometimes just pain.... when it comes to their variable declaration and use. :) Okay! tell me how come you loose track of some node within a node tree ... eh? So what it is do with any language be it as simple as machine level code. You know you VS compiler can easily detect if some variable or routine is dead code. Got my point?
About developing third party tool. I think compiler vendors can implement it far more easily and effectively if they ever wanted to then a third party tool which will have to duplicate all the parsing database to handle it. Nowadays compiler can optimize code very efficiently at machine code level and I am hearing here that its difficult to tell how some variable is used previously. You haven't paid any real attention to inner working of compiler I suppose. What database it keep within.
And sure its the almost same database that IDE use for all such similar purposes. In previous time compiler were just a separate entity and IDE just a Text Editor with some specialization but as times goes by the gap between compiler and IDE Editor become less and its directly started working on similar parsed database. Which makes it possible to handle all those intellisense and refactoring or other syntax related issues more effectively. With all precompile things and JIT compiling this gap is almost negligent. So it almost make sense to use same database for both purpose or else your memory demand go higher due to duplication.
You all are programmers - I am not! And you guys seems to be having difficulty visualizing how refactoring can be implemented for C++ or any language that I can't comprehend. Its just all about for something you have to put more effort for some less depending on how heavy is a person you trying push.
Anyway way VS a nice IDE especially when it comes to C#.

Netbeans or Eclipse for C++? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
I'm currently working on a pet project and need to do C++ development on Windows, Mac, Linux, and Solaris, and I've narrowed it down to Netbeans and Eclipse, so I was wonderig which is more solid as a C++ editor. I just need solid editing, good autocompletion for templated code ad external libraries, and project file management, the build tools are external, so thats irrelevant here, for my comparison.
Thus which is a better choice?
Note: I know I should be using emacs or vim, but the issue is, my theory at least, that I'm left handed, so I use my right side (design,creativity) of the brain more than the left side (logic, memory), so I just simply cannot use emacs or vim, my brain simply isn't compatible, I tried them many times too, even used emacs for a few months but it drove me crazy...
Thanks
I haven't used NetBeans, but Eclipse CDT (C Developer Tools, which includes C++), especially with the latest version, is really quite excellent:
Syntax checking and spell checking
Syntax highlighting that distinguishes between library calls and your function calls and between local and member variables and is even applied to code that's #ifdef'ed out
Macro expansion that can step you through each level of macro application or show the final result even of very complex Boost Preprocessor macros
A file and class outline view that updates dynamically to show where you are in a file. (Commercial IDE's I've used fail to do this.)
Powerful, flexible Find/Replace and Find in Files features with complete Perl-style regex support. It's also supposed to be able to do a C/C++ Find in Files that can search based on language semantics (e.g., only find references, not declarations), although this sometimes doesn't work for me.
Automatic tracking of TODO and other comment tags
Mouseover tips that show the exact declaration of a variable or function, including any comments, instead of just where a variable or function is declared. (Again, commercial IDE's I've used fail to do this.)
Support via plugins for Subversion, Doxygen, etc.
Some refactoring support - rename, extract constant, extract function, a few others
Code reformatter, based on user-definable code styles
You'd asked specifically about its editor; the Eclipse editor is good enough that I use it in preference to the commercial IDE for our product whenever I don't need the commercial IDE's forms designer.
Eclipse's debugger integration (using gdb) is tolerable but not great, and its memory usage is high. A few features (like the C/C++ Find in Files) don't work reliably or require reindexing (which is time consuming) for no apparent reason, but the latest version seems more reliable in this regard.
Can someone who's used NetBeans fill in how it compares?
I'm using Netbeans from time to time on Solaris and the latest (6.5) version is pretty neat. It has all the features that you need, perhaps autocompletion could work better, but I have a really bad code base so it might be the result of it. Keep in mind that you need strong machine for that, if it's your PC it's ok but Netbeans on a remote server (like I tried) is really slow unless you have a decent hardware. There are few simple refactorings for C++ with nice preview option, definitely worth a try.
You can get a whole Sun C++ pack from here:
http://developers.sun.com/sunstudio/downloads/express/
Personally I prefer NetBeans - the project management is excellent and I was up and running quicker than with Eclipse. However, it is subjective and YMMV.
They are both bloated and slow, IMHO. Why don't you try Code::Blocks instead? It is specifically aimed at C++ developers and performs much better than either Eclipse or NetBeans.
Just to give 2 cents to the comments about speed or performance issues with eclipse/netbeans:
The only part of an IDE that sucks if it is slow is the editor component.
And in contrast to some obviously superficial assertions here, I found the editor
component in Eclipse extremely snappy. The rest of the IDE is prone to lags,
but the editor itself delivers spotless performance.
I have a 1.4GHz Laptop and use Eclipse with it. Eclipse's editor component is faster (especially when scrolling/browsing through text) than Code::Blocks or KDevelop. The simple reason for this is: Eclipse caches everything, especially the syntax highlighting etc., other IDEs seem to try to do this ''live'' and fail.
The c++ indexer was a cause of woe in versions past. It crashed when out of memory, without it none of the nifty search functions worked, etc.
For the current version I can only say: It is all fixed and it works like a charm.
It's speed is comparable to the VisualStudio Indexer.
If you install Eclipse CDT you get a ton of nice features as has been explained in other replies already, that most other IDEs only provide with multiple plugins. (I don't know about netbeans, never used it.)
The feature that kicks me everytime is the smart tooltip when I hover over some identifier. Eclipse gives me direct access to any javadoc that might be entered somewhere and the file where it is defined and even lets me scroll around inside the tooltip!
So I have every identifiers full context at my fingertips, everywhere.
I prefer it over Visual Studio and pretty much everything else I've tried.
Granted, everything else you do in the IDE could be snappier. For me, the crucial thing is, that the editor is fast and eclipse's definitely does a great job there.
The only thing I hate about Netbeans is that the debugger is kinda slow in comparison to Eclipse . Besides that , Netbeans would be my choice .
If you run eclipse under linux you can use valgrind for memory leaks. Eclipse supports gdb well enough for me, but I couldn't find a decent memory leak plugin, and the valgrind integration plugin is in beta. This blog does a great tutorial for it: http://kapo-cpp.blogspot.com/2007/02/detecting-memory-leak.html . I cast my vote for eclipse on linux. P.S Real men use ed only.
The c++ parser in code::blocks doesn't seem to be on par with netbeans and eclipse ones: according to code::block's wiki, it needs to be entirely rewritten.
They're both excellent for C++ development, but one thing that I've recently found lacking in NetBeans is that there doesn't seem to be a plugin available for CppUnit, or any other C++ unit testing framework. I'd love to get some more responses to this question if I'm wrong about that.
(Also, I know development is always going on for NetBeans, so maybe someone will come up with a plugin soon.)
For C++ I'd have to agree with Nemanja Trifunovic and say you should give Code::Blocks a look. It's free, and has great performance. I started using it a few years ago after switching from Bloodshed Dev-C++ (which is basically not supported anymore) and couldn't be happier.
I'm a huge fan of Eclipse and have used it extensively for Java and C++ programming. However, currently, it does not support remote C++ development. I tried Netbeans Remote C++ development and have found it to be rather excellent and extremely simple. Having said that, the C++ parsing is not as fluid as Eclipse, the autocomplete sometimes gets in the way and doesn't go away, and the biggest problem I have had is the constant need to restart the IDE due to very slow performance. I hope Eclipse can continue to build it's Remote C++ development capabilities and use Netbeans as an example of how to make it very simple!
having used eclipse for some time now i recently took a look at netbeans and must say i quite like it. at the end of the day they are both excellent ides and it is a very subjective choice.
in my opinion netbeans seems to be a bit faster than eclipse, but that might just be a feeling.
I have been using Net Beans so far. But I was forced to switch to Eclipse due to problems in NetBeans. There is a Net Beans bug which renders the IDE useless when you work with projects with a large amount of source files. Many people have been complaining, but it seems the Net Beans team was unable to fix the problem which stops the IDE from responding when it is parsing the source files. :(
Reported in:
Petr Dvorak - Oracle Blog
As a solution they provide an on-demand parsing mechanism which does not work for me :(
Net Beans Wiki

C++ IDE for Linux? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.
I want to expand my programming horizons to Linux. A good, dependable basic toolset is important, and what is more basic than an IDE?
I could find these SO topics:
Lightweight IDE for linux and
What tools do you use to develop
C++ applications on Linux?
I'm not looking for a lightweight IDE. If an IDE is worth the money, then I will pay for it, so it need not be free.
My question, then:
What good, C++ programming IDE is available for Linux?
The minimums are fairly standard: syntax highlighting, code completion (like intellisense or its Eclipse counterpart) and integrated debugging (e.g., basic
breakpoints).
I have searched for it myself, but there are so many that it is almost impossible to separate the good from the bads by hand, especially for someone like me who has little C++ coding experience in Linux. I know that Eclipse supports C++, and I really like that IDE for Java, but is it any good for C++ and is there something better?
The second post actually has some good suggestions, but what I am missing is what exactly makes the sugested IDE so good for the user, what are its (dis)advantages?
Maybe my question should therefore be:
What IDE do you propose (given your experiences), and why?
Initially: confusion
When originally writing this answer, I had recently made the switch from Visual Studio (with years of experience) to Linux and the first thing I did was try to find a reasonable IDE. At the time this was impossible: no good IDE existed.
Epiphany: UNIX is an IDE. All of it.1
And then I realised that the IDE in Linux is the command line with its tools:
First you set up your shell
Bash, in my case, but many people prefer
fish or
(Oh My) Zsh;
and your editor; pick your poison — both are state of the art:
Neovim2 or
Emacs.
Depending on your needs, you will then have to install and configure several plugins to make the editor work nicely (that’s the one annoying part). For example, most programmers on Vim will benefit from the YouCompleteMe plugin for smart autocompletion.
Once that’s done, the shell is your command interface to interact with the various tools — Debuggers (gdb), Profilers (gprof, valgrind), etc. You set up your project/build environment using Make, CMake, SnakeMake or any of the various alternatives. And you manage your code with a version control system (most people use Git). You also use tmux (previously also screen) to multiplex (= think multiple windows/tabs/panels) and persist your terminal session.
The point is that, thanks to the shell and a few tool writing conventions, these all integrate with each other. And that way the Linux shell is a truly integrated development environment, completely on par with other modern IDEs. (This doesn’t mean that individual IDEs don’t have features that the command line may be lacking, but the inverse is also true.)
To each their own
I cannot overstate how well the above workflow functions once you’ve gotten into the habit. But some people simply prefer graphical editors, and in the years since this answer was originally written, Linux has gained a suite of excellent graphical IDEs for several different programming languages (but not, as far as I’m aware, for C++). Do give them a try even if — like me — you end up not using them. Here’s just a small and biased selection:
For Python development, there’s PyCharm
For R, there’s RStudio
For JavaScript and TypeScript, there’s Visual Studio Code (which is also a good all-round editor)
And finally, many people love the Sublime Text editor for general code editing.
Keep in mind that this list is far from complete.
1 I stole that title from dsm’s comment.
2 I used to refer to Vim here. And while plain Vim is still more than capable, Neovim is a promising restart, and it’s modernised a few old warts.
My personal favorite is the CodeLite 2.x IDE.
see: http://www.codelite.org
The decision to use CodeLite was based on a research regarding the following C++ IDE for Linux:
Eclipse Galileo with CDT Plugin
NetBeans 6.7 (which is also the base for the SunStudio IDE)
KDevelop4
CodeBlocks 8.02
CodeLite 2.x
After all I have decided to use CodeLite 2.x.
Below I have listed some Pros and Cons regarding the mentioned C++ IDEs. Please note, that this reflects my personal opinion only!
EDIT: what a pity that SOF doesn't support tables, so I have to write in paragraphs ...
Eclipse Galileo with CDT Plugin
Pros:
reasonable fast
also supports Java, Perl(with E.P.I.C plugin)
commonly used and well maintained
also available for other OS flavours (Windows, MacOS, Solaris, AIX(?))
Cons:
GUI is very confusing and somewhat inconsistent - not very intuitive at all
heavy weight
Only supports CVS (AFAIK)
NetBeans 6.7 (note this is also the base for the SunStudio IDE)
Pros:
one of the most intuitive GUI I have ever seen
also supports Java, Python, Ruby
integrates CVS, SVN, Mercurial
commonly used and well maintained
also available for other OS flavours (Windows, MacOS, Solaris)
Cons:
extremly slow
heavy weight
uses Spaces for indentation, which is not the policy at my work. I'm sure this is configurable, but I couldn't find out how to to that
KDevelop4 (note: I did not much testing on it)
Pros:
commonly used on Linux
integrates CVS, SVN, Mercurial
Cons:
the GUI looks somewhat old fashioned
heavy weight
very specific to the KDE environment
CodeBlocks 8.02 (note: I did not much testing on it)
Pros:
reasonable fast
Cons:
the GUI looks somewhat old fashioned (although it has a nice startup screen)
the fonts in the editor are very small
some icons (e.g. the debugger related icons starting/stepping) are very small
no source control integration
CodeLite 2.x (note: this is my personal favorite)
Pros:
the best, modern looking and intuitive GUI I have seen on Linux
lightweight
reasonable fast
integrates SVN
also available on other OS flavours(Windows, MacOS, Solaris(?))
Cons:
no CVS integration (that's important for me because I have to use it at work)
no support for Java, Perl, Python (would be nice to have)
Code::Blocks
Eclipse CDT
Soon you'll find that IDEs are not enough, and you'll have to learn the GCC toolchain anyway (which isn't hard, at least learning the basic functionality). But no harm in reducing the transitional pain with the IDEs, IMO.
A quick answer, just to add a little more knowledge to this topic:
You must definitely check out NetBeans. Netbeans 6.7 has the following features:
C/C++ Projects and Templates: Supports syntax highlighting,
automatic code completion, automatic indentation.
It has a C/C++ Debugger
Supports Compiler Configurations, Configuration Manager and Makefile Support (with a
Wizard).
It has a Classes Window, a Usages Window and a File Navigation Window (or panel).
A Macro expansion view, and also tooltips.
Support for QT development.
I think it's a perfect (and far better) Visual Studio substitution, and a very good tool to learn C/C++.
Good Luck!
At least for Qt specific projects, the Qt Creator (from Nokia/Trolltech/Digia) shows great promise.
could you clarify a little bit more how it was for you, what you had to change. Maybe you could point me in the right direction by providing some links to the information you used.
My first source were actually the tools' man pages. Just type
$ man toolname
on the command line ($ here is part of the prompt, not the input).
Depending on the platform, they're quite well-written and can also be found on the internet. In the case of make, I actually read the complete documentation which took a few hours. Actually, I don't think this is necessary or helpful in most cases but I had a few special requirements in my first assignments under Linux that required a sophisticated makefile. After writing the makefile I gave it to an experienced colleague who did some minor tweaks and corrections. After that, I pretty much knew make.
I used GVIM because I had some (but not much) prior experience there, I can't say anything at all about Emacs or alternatives. I find it really helps to read other peoples' .gvimrc config file. Many people put it on the web. Here's mine.
Don't try to master all binutils at once, there are too many functions. But get a general overview so you'll know where to search when needing something in the future. You should, however, know all the important parameters for g++ and ld (the GCC linker tool that's invoked automatically except when explicitly prevented).
Also I'm curious, do you have code completion and syntax highlighting when you code?
Syntax highlighting: yes, and a much better one than Visual Studio. Code completion: yes-ish. First, I have to admit that I didn't use C++ code completion even in Visual Studio because (compared to VB and C#) it wasn't good enough. I don't use it often now but nevertheless, GVIM has native code completion support for C++. Combined with the ctags library and a plug-in like taglist this is almost an IDE.
Actually, what got me started was an article by Armin Ronacher. Before reading the text, look at the screenshots at the end of it!
do you have to compile first before getting (syntax) errors?
Yes. But this is the same for Visual Studio, isn't it (I've never used Whole Tomato)? Of course, the syntax highlighting will show you non-matching brackets but that's about all.
and how do you debug (again think breakpoints etc)?
I use gdb which is a command-line tool. There's also a graphical frontend called DDD. gdb is a modern debugging tool and can do everything you can do in an IDE. The only thing that really annoys me is reading a stack trace because lines aren't indented or formatted so it's really hard to scan the information when you're using a lot of templates (which I do). But those also clutter the stack trace in IDEs.
Like I said, I had the 'pleasure' to set my first steps in the Java programming language using windows notepad and the command line java compiler in high school, and it was, .. wel a nightmare! certainly when I could compare it with other programming courses I had back then where we had decent IDE's
You shouldn't even try to compare a modern, full-feature editor like Emacs or GVIM to Notepad. Notepad is an embellished TextBox control, and this really makes all the difference. Additionally, working on the command line is a very different experience in Linux and Windows. The Windows cmd.exe is severely crippled. PowerShell is much better.
/EDIT: I should mention explicitly that GVIM has tabbed editing (as in tabbed browsing, not tabs-vs-spaces)! It took me ages to find them although they're not hidden at all. Just type :tabe instead of plain :e when opening a file or creating a new one, and GVIM will create a new tab. Switching between tabs can be done using the cursor or several different shortcuts (depending on the platform). The key gt (type g, then t in command mode) should work everywhere, and jumps to the next tab, or tab no. n if a number was given. Type :help gt to get more help.
Not to repeat an answer, but I think I can add a bit more.
Slickedit is an excellent IDE.
It supports large code-bases well without slowing down or spending all its time indexing. (This is a problem I had with eclipse's cdt). Slickedit's speed is probably the nicest thing about it, actually.
The code completion works well and there are a large amount of options for things like automatic formatting, beautification and refactoring.
It does have integrated debugging.
It has plug-in support and fairly active community creating them.
In theory, you should be able to integrate well with people doing the traditional makefile stuff, as it allows you to create a project directly from one, but that didn't work as smoothly as I would have liked when I tried it.
In addition to Linux, there are Mac and Windows versions of it, should you need them.
As an old-time UNIX guy, I always use Emacs. But that has a pretty steep and long learning curve, so I'm not sure I can recommend it to newcomers.
There really isn't a "good" IDE for Linux. Eclipse is not very good for C/C++ (CDT is improving, but is not very useful yet). The others are missing all the features you are going to be looking for.
It really is important to learn how all the individual tools (gcc, make, gdb, etc.) work. After you do so, you may find the Visual Studio way of doing things to be very limiting.
Checkout Netbeans, it's written in Java so you'll have the same environment regardless of your OS, and it supports a lot more than just C++.
I'm not going to try to convince you, because I think IDEs can be a very personal choice. For me it improves my productivity by being fast, supporting the languages I code in and has the standard features you'd expect from an IDE.
Just a quick follow up for this question...
It's been a month since I started using Vim as my main 'GUI'
tool for programming C++ in Linux. At first the learning
curve was indeed a bit steep but after a while and with the
right options turned on and scripts running I really
got the hang of it!
I love the way how you can shape Vim to suite your needs;
just add/change key mappings and Vim is turned into a
highly productive 'IDE'.
The toolchain to build and compile a C++ program on Linux is
also really intuitive. make and g++ are the tools you'll
use.
The debugger ddd is however not really that good, but
maybe that's because I haven't had the time to master it
properly.
So to anyone who is, or was looking for a good C++ IDE in
Linux, just like I was, your best bet lays with the standard
available tools in Linux itself (Vim, g++, ddd) and you
should really at least try to use them, before looking for
sonething else...
Last but not least, I really want to thank konrad for
his answer here, It really helped me find my way in the
Linux development environment, thank you!
I'm also not closing this question, so people can still
react or maybe even add new suggestions or additions to the
already really nice answers...
I recommend you read The Art Of UNIX Progranmming. It will frame your mind into using the environment as your IDE.
Shorter answer is: choosing whatever "editor" you like, then use GDB console or a simple GDB front end to debug your application. The debuggers come with fancy IDEs such as Netbeans sucks for C/C++. I use Netbeans as my editor, and Insight and GDB console as my debugger.
With insight, you have a nice GUI and the raw power of GDB.
As soon as you get used to GDB commands, you will start to love it since you can do things you will never be able to do using an GUI. You can use even use Python as your script language if you are using GDB 7 or newer version.
Most people here paid more attentions to the "Editors" of the IDEs. However, if you are developing a large project in C/C++, you could easily spend more than 70% of your time on the "debuggers". The debuggers of the fancy IDEs are at least 10 years behind Visual Studio. For instance, Netbenas has very similar interfaces with Visual Studio. But its debugger has a number of disadvantages compared to Visual Studio.
Very slow to display even a array with only a few hundreds of elements
No highlighting for changed value ( By default, visual studio shows changed values in the watch windows in red)
Very limited ability to show memory.
You cannot modify the source code then continue to run. If a bug takes a long time to hit, you would like to change the source and apply the changes live and continue to run your application.
You cannot change the "next statement" to run. In Visual Studio, you can use "Set Next Statement" to change how your application runs. Although this feature could crash your application if not used properly, but it will save you a lot of time. For instance, if you found the state of your application is not correct, but you do not know what caused the problems, you might want to rerun a certain region of the your source codes without restarting your application.
No built-in support for STL such as vector, list, deque and map etc.
No watch points. You need to have this feature, when you need to stop your application right at the point a variable is changed. Intel based computers have hardware watch points so that the watch points will not slow down your system. It might takes many hours to find some hard-to-find bugs without using watch points. "Visual Studio" calls "watch pointer" as "Data BreakPoint".
The list can be a lot longer.
I was so frustrated by the disadvantages of the Netbeans or other similar IDEs, so that I started to learn GDB itself. I found GDB itself are very powerful. GDB does not have all the "disadvantages" mentioned above. Actually, GDB is very powerful, it is even better than Visual Studio in many ways. Here I just show you a very simple example.
For instance, you have a array like:
struct IdAndValue
{
int ID;
int value;
};
IdAndValue IdAndValues[1000];
When your application stops, and you want to examine the data in IdAndValues. For instance, if you want to find the ordinals and values in the array for a particular "ID", you can create a script like the following:
define PrintVal
set $i=0
printf "ID = %d\n", $arg0
while $i<1000
if IdAndValues[$i].ID == $arg0
printf "ordinal = %d, value = %d\n", $i, IdAndValues[$i].vaue
set $i++
end
end
end
You can use all variables in your application in the current context, your own variables (in our example, it is $i), arguments passed (in our example, it is $arg0) and all GDB commands (built-in or user defined).
Use PrintVal 1 from GDB prompt to print out values for ID "1"
By the way, NetBeans does come with a GDB console, but by using the console, you could crash Netbeans. And I believe that is why the console is hidden by default in NetBeans
I am using "Geany" found good so far, its fast and light weight IDE.
Among Geany’s features are:
Code folding
Session saving
Basic IDE features such as syntax highlighting, tabs, automatic indentation and code completion
Simple project management
Build system
Color picker (surprisingly handy during web development)
Embedded terminal emulation
Call tips
Symbol lists
Auto-completion of common constructs (such as if, else, while, etc.)
If you like Eclipse for Java, I suggest Eclipse CDT.
Despite C/C++ support isn't so powerful as is for Java, it still offers most of the features. It has a nice feature named Managed Project that makes working with C/C++ projects easier if you don't have experience with Makefiles. But you can still use Makefiles.
I do C and Java coding and I'm really happy with CDT. I'm developing the firmware for a embedded device in C and a application in Java that talks to this device, and is really nice to use the same environment for both. I guess it probably makes me more productive.
I love how people completely miss the request in the original question for an IDE. Linux is NOT an IDE. That's just not what those words mean. I learned c and c++ using vi and gcc and make, and I'm not saying they aren't adequate tools, but they are NOT an IDE. Even if you use more elaborate tools like vim or emacs or whatever fancy editor you want, typing commands on a command line is not an IDE.
Also, you all know make exists as part of visual studio right? The idea that an IDE is "limiting" is just silly if you can use the IDE to speed some things, yet are still able to fall back on command line stuff when needed.
All that said, I'd suggest, as several above have, trying Code blocks. Its got decent code highlighting, a pretty effortless way to create a project, code it, run it, etc, that is the core of a real IDE, and seems fairly stable. Debugging sucks...I have never seen a decent interactive debugger in any linux/unix variant. gdb ain't it. If you're used to visual studio style debugging, you're pretty much out of luck.
Anyway, I'll go pack my things, I know the one-view-only linux crowd will shout this down and run me out of town in no time.
make + vim + gdb = one great IDE
I quite like Ultimate++'s IDE. It has some features that were designed to use with their own library (which, BTW, is quite a nice toolkit if you don't want to buy on either GTK+ or QT) but it works perfectly well with general C++ projects. It provides decent code completion, good syntax colouring, integrated debugging, and all other features most modern IDEs support.
I really suggest codeblocks. It's not as heavy as Eclipse and it's got Visual Studio project support.
Perhaps the Linux Tools Project for Eclipse could fill your needs?
The Linux Tools project aims to bring a full-featured C and C++ IDE to Linux developers. We build on the source editing and debugging features of the CDT and integrate popular native development tools such as the GNU Autotools, Valgrind, OProfile, RPM, SystemTap, GCov, GProf, LTTng, etc. Current projects include LTTng trace viewers and analyzers, an RPM .spec editor, Autotools build integration, a Valgrind heap usage analysis tool, and OProfile call profiling tools.
On Linux there are plenty of IDEs:
Code::blocks
Codelite
KDevelop
Qt Creator
Eclipse with CDT
NetBeans
In my experience, the most valuable are Eclipse and Qt Creator.
Both provide all "standard" features (i.e., autocompletion, syntax highlightning, debugger, git integration).
It is worth noting that Eclipse also provides refactoring functionalities, while Qt Creator provides integration with Valgrind and support for deployment on remote targets.
Also the commercial CLion IDE seems preety good (but I've not used it extensively).
I hear Anjuta is pretty slick for Gnome users. I played a bit with KDevelop and it's nice, but sort of lacking featurewise. Code::Blocks is also very promising, and I like that one best.
Sun Studio version 12 is a free download(FREE and paid support available) -- http://developers.sun.com/sunstudio/downloads/thankyou.jsp?submit=%A0FREE+Download%A0%BB%A0.
I'm sure you have code completion and debugging support including plugin support in this IDE.
Sun Studio is available for Linux as well as Solaris.
forums : http://developers.sun.com/sunstudio/community/forums/index.jsp.
Sun Studio Linux forums : http://forum.sun.com/forum.jspa?forumID=855
I'll be eager to hear your feedback on this tool.
BR,
~A
I've previously used Ultimate++ IDE and it's rather good.
And then I noticed that this simply isn't how you work there*, and I threw everything out, spent a few days reading manuals, set up my shell (bash), set up a GVIM environment, learned the GCC/binutils toolchain, make and gdb and lived happily ever after.
I'd mostly agree, but the problem is also one of perception: we forget how difficult it was to become productive in any chose IDE (or other environment). I find IDE's (Visual Studio, NetBeans, Eclipse) amazingly cumbersome in so many ways.
As an old-time UNIX guy, I always use Emacs. But that has a pretty steep
and long learning curve, so I'm not sure I can recommend it to newcomers.
I'd second that; use Emacs as my primary editor on both Linux and on MSW (XP2,W2K).
I would disagree that it has a steep learning curve, but would say that because of the huge number of features it has a long learning curve. You can be productive within a short time, but if you want you can learn new features of it for years to come.
However -- don't expect all the features of Emacs to be available on drop-down menus, there is just too much functionality to find it there.
As I metioned, I've used GNU Emacs on MSW for years. And it's always worked well with Visual Studio until I "upgraded" to 2008; now it sometimes delays many seconds before refreshing files from disk. The main reason for editing in the VS window is the "Intellisense" code completion feature.
geany I recommend
Although I use Vim, some of my co-workers use SlickEdit which looks pretty good. I'm not certain about integrated debugging because we wouldn't be able to do that on our particular project anyway.
SlickEdit does have good support for navigating large code bases, with cross referencing and tag jumping. Of course it has the basic stuff like syntax highlighting and code completion too.
I use Eclipse CDT and Qt Creator (for Qt applications).
That's my preferences. It's a very suggestive question and there is as many answers as there is developers. :)
SlickEdit. I have used and loved SlickEdit since 2005, both on Windows and on Linux. I also have experience working in Visual Studio (5, 6, 2003, 2005) and just with Emacs and command line. I use SlickEdit with external makefiles, some of my teammates use SlickEdit, others use Emacs/vi. I do not use the integrated debugger, integrated version control, integrated build system: I generally find too much integration to be real pain. SlickEdit is robust (very few bugs), fast and intuitive. It is like a German car, a driver's car.
The newest versions of SlickEdit seem to offer many features that do not interest me, I am a little worried that the product will become bloated and diluted in the future. For now (I use V13.0) it is great.
For me Ultimate++ seems to be the best solution to write cross-os program
If you were using vim for a long time, then you should actually make that as your IDE. There are a lot of addons available. I found several of those as pretty useful, and compiled it here, have a look at it.
C/C++ IDE
Source code browser
And a lot more in the vi / vim tips & tricks series over there.