[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: GURU NEEDED : macro SQUARE(x) for any type x
From: |
Bart van Ingen Schenau |
Subject: |
Re: GURU NEEDED : macro SQUARE(x) for any type x |
Date: |
Fri, 14 Jan 2011 01:57:19 -0800 (PST) |
User-agent: |
G2/1.0 |
On Jan 14, 7:46 am, bolega <gnuist...@gmail.com> wrote:
> Basically, I have spent a few hours experimenting and searching on the
> comp.lang.c/c++
>
> Let me use SQR for brevity and saving line
>
> Here are progressively refined macros :
>
> #define SQR(x) ((x)*(x))
>
> #define SQR(x) ({typedef xtype=x; xtype xval=x; xval*xval}) // NOTE,
> closure or {} inside () is a valid idea in C, and thus no return is
> needed.
The ({ ... }) construct is not valid in standard C or standard C++. It
is a GCC extension.
If you want a standard-conforming macro that works for any type and
also yields a value of that same type, you are stuck with the first
macro you present.
There is no way to write such a macro in standard C without evaluating
x twice.
In C++, you have the option of using an inline templated function, as
shown by Gert-Jan de Vos.
If your portability needs do not extend beyond GCC (and compilers
accepting the same dialect), you can use an expression-block similar
to the second block, as shown by Rivka Miller.
>
> Bolega
Bart v Ingen Schenau