This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Volatile constants?
- To: "Christian Häggström" <97nv46 at skola dot kiruna dot se>
- Subject: Re: Volatile constants?
- From: Richard Earnshaw <rearnsha at arm dot com>
- Date: Fri, 31 Mar 2000 12:16:09 +0100
- Cc: gcc at gcc dot gnu dot org, J dot A dot K dot Mouw at its dot tudelft dot nl
- Cc: rearnsha at arm dot com
- Organization: ARM Ltd.
- Reply-To: rearnsha at arm dot com
> inline int abs1(int x) {
> return x<0 ? -x : x;
> }
> #define abs2(x) ((x)<0 ? -(x) : x)
>
> int r = abs1(-7);
> int s = abs2(-7);
>
> >An inline function is NOT a macro, it's still a function. You can't use a
> >function as an initializer for a static extent variable in C.
>
> OK, this is not valid in ANSI C
> In C++, however, this is valid.
> Now, take a look at the assembly output (x86,regparm)
>
[...]
> Why is 'r' not handled as 's'?
> This is slower and occupies more memory.
>
Because even in C++ you have still specified it as a constructor function,
not a constant expression. All this means is that the your inline
function will get inlined into your constructors rather than left as a
stand-alone function that is called by them (try taking the "inline" out
and see how it changes your assembly output).
R.