From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Christian Häggström" <97nv46@skola.kiruna.se> To: Cc: , Subject: Re: Volatile constants? Date: Fri, 31 Mar 2000 02:50:00 -0000 Message-id: X-SW-Source: 2000-03/msg00843.html 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) .data s: .long 7 .bss r: .zero 4 .text __static_initialization_and_destruction_0: cmpl $65535,%edx jne .L86 testl %eax,%eax je .L86 movl $7,r .L86: ret _GLOBAL_.I.s: movl $65535,%edx movl $1,%eax call __static_initialization_and_destruction_0 ret .section .ctors,"aw" .long _GLOBAL_.I.s Why is 'r' not handled as 's'? This is slower and occupies more memory.