🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #309936

Re: Błąd preprocesora czy czegoś nie rozumiem?

#309936
From: Maciek Godek
Date: Thu, 03 Oct 2019 22:20
36 lines
2310 bytes
W dniu czwartek, 3 października 2019 22:19:36 UTC+2 użytkownik M.M. napisał:
> Witam
> 
> Jest sobie poniższy program i działa:
> 
> #define TEST1( __x__ ) int __x__  = __LINE__
> #define TEST2( __x__ ) int __x__  ## __LINE__ = 0
> 
> int main(int argc, char *argv[]) {
>     TEST1( x );
>     printf( "%d\n" , x );
> //    TEST2( y );
> //    TEST2( y );
>     return 0;
> }
> 
> Jednak jak odkomentuję dwie line:
> //    TEST2( y );
> //    TEST2( y );
> 
> to już mam błąd:
> 
> redeclaration of 'int y__LINE__'
>      TEST2( y );
>             ^
> 
> Od czego zależy kiedy rozwija makro __LINE__ a kiedy nie?
> 
> Pozdrawiam

Zdaje się, że kolejność, w jakiej preprocesor rozwija argumenty, jest niezdefiniowana w standardzie, i zależy od implementacji.

Możesz spróbować taki trick:

#define _TEST2_(x, line) int x##line = 0
#define TEST2(x) _TEST2_(x, __LINE__)
Technical Details
Message-ID: <f1c8f951-ad5b-4fca-8e58-2fb7a4850aaa@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!o24no3963728qtl.0!news-out.google.com!x7ni693qtf.0!nntp.google.com!o24no3963715qtl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <780a7f39-337b-4b6b-810f-7c4151e10f74@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a05:620a:4c9:: with SMTP id 9mr7083852qks.235.1570141255298;        Thu, 03 Oct 2019 15:20:55 -0700 (PDT)
X-Received: by 2002:a25:f509:: with SMTP id a9mr7571277ybe.85.1570141255061; Thu, 03 Oct 2019 15:20:55 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!o24no3963728qtl.0!news-out.google.com!x7ni693qtf.0!nntp.google.com!o24no3963715qtl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Thu, 3 Oct 2019 15:20:54 -0700 (PDT)
In-Reply-To: <780a7f39-337b-4b6b-810f-7c4151e10f74@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=83.25.250.157; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
NNTP-Posting-Host: 83.25.250.157
References: <780a7f39-337b-4b6b-810f-7c4151e10f74@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <f1c8f951-ad5b-4fca-8e58-2fb7a4850aaa@googlegroups.com>
Subject: Re: Błąd preprocesora czy
 czegoś nie rozumiem?
From: Maciek Godek <godek.maciek@gmail.com>
Injection-Date: Thu, 03 Oct 2019 22:20:55 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit