lkml.org 
[lkml]   [2001]   [Jul]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: linux/macros.h(new) and linux/list.h(mod) ...
Em Fri, Jul 06, 2001 at 06:38:04PM +0100, Neil Booth escreveu:
> Alan Cox wrote:-
>
> > #define min(a,b) __magic_minfoo(a,b, __var##__LINE__, __var2##__LINE__)
> >
> > #define __magic_minfoo(A,B,C,D) \
> > { typeof(A) C = (A) .... }
>
> No, that's buggy. You need an extra level of indirection to expand
> __LINE__. Arguments to ## are inserted in-place without expansion.

yes, so lets try with another indirection and see if I'm missing something
that you could clarify :)

[acme@brinquedo __attribute__]$ cat b.c
#define _min(a,b,line) __magic_minfoo(a,b, __var##line, __var2##line)
#define min(a,b) _min(a,b,__LINE__)

#define __magic_minfoo(A,B,C,D) \
({ typeof(A) C = (A); typeof(B) D = (B); C>D?D:C; })

void main(void)
{
int __var11=5, __var211=7;

printf("min(%d,%d) = %d (should be 11: %d)\n", __var11, __var211,
min(__var11, __var211), __LINE__);
}
[acme@brinquedo __attribute__]$ cpp < b.c
# 1 ""
void main(void)
{
int __var11=5, __var211=7;

printf("min(%d,%d) = %d (should be 11: %d)\n", __var11, __var211,
({ typeof( __var11 ) __var__LINE__ = ( __var11 );
typeof( __var211 ) __var2__LINE__ = ( __var211 );
__var__LINE__ > __var2__LINE__ ? __var2__LINE__ : __var__LINE__ ; })
, 12);
}
[acme@brinquedo __attribute__]$

- Arnaldo
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 12:56    [W:0.073 / U:2.720 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site