There are always few little known or hidden features in each programming language. At StackOverflow.com someone started a series of posts “Hidden features of” programming languages. The Hidden Features series is great for people who are new to a certain language.
I have collected few of the features of both C and C++ here.
Like the ternary operator; most of the programmers are familiar with.
x = (y < 0) ? 10 : 20;
However this can be used the other way.
(y < 0 ? x : y) = 20;
It means the following.
if (y < 0) { y = 20; } else { x = 20; }
Another feature is Resource Acquisition Is Initialization (RAII) which is often ignored by the programmers coming from non object oriented world i.e. C programming background.
Can you write a return statement in a function that returns void?
static void foo (void) { } static void bar (void) { return foo(); // Note this return statement. } int main (void) { bar(); return 0; }
Even you could write something like
static void foo() { return (void)"i'm discarded"; }
The comma operator isn’t widely used. It can certainly be abused, but it can also be very useful. One of the most common use is
for (int i=0; i<10; i++, doSomethingElse()) { /* whatever */}
C99 has some awesome any-order structure initialization.
struct foo{ int x; int y; char* name; }; void main(){ foo f = { .y = 23, .name = "awesome", .x = -38 }; }