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.
1 | x = (y < 0) ? 10 : 20; |
However this can be used the other way.
(y < 0 ? x : y) = 20;
It means the following.
1 2 3 4 5 6 | 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?
1 2 3 4 5 6 7 8 9 10 | 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
1 | 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
1 2 3 4 | for (int i=0; i<10; i++, doSomethingElse()) { /* whatever */ } |
C99 has some awesome any-order structure initialization.
1 2 3 4 5 6 7 8 9 | struct foo{ int x; int y; char* name; }; void main(){ foo f = { .y = 23, .name = "awesome", .x = -38 }; } |