Article View: pl.comp.lang.c
Article #309944Re: Błąd preprocesora czy czegoś nie rozumiem?
From: M.M.
Date: Thu, 03 Oct 2019 22:20
Date: Thu, 03 Oct 2019 22:20
43 lines
3002 bytes
3002 bytes
On Thursday, October 3, 2019 at 11:36:18 PM UTC+2, PawelS pawel(at)wbcd(dot)pl wrote:
> M.M. pisze:
> > 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?
> Powyższy błąd nie ma nic wspólnego z "rozwija makro".
> Spróbuj sam się wczuć w rolę preprocesora i podstaw sobie makro.
> Powyższy problematyczny zapis jak dla mnie (mogę się mylić)
> po ... (nie wiem jak to nazwać) przy kompilacji może wyglądać tak:
> > // TEST2( y );
> > // TEST2( y );
> > #define TEST2( __x__ ) int __x__ ## __LINE__ = 0
> int __y__ ## __LINE__ = 0;
> int __y__ ## __LINE__ = 0;
> niech mnie ktoś poprawi, ale to wygląda trochę jak
> podwójna deklaracja tej samej zmiennej,
> albo już zbyt zmęczony jestem ...
Ok, ale dlaczego (zgodnie z oczekiwaniami) działa makro TEST1?
Pozdrawiam
Technical Details
Message-ID:
<88bd1fd1-2d3a-499f-9479-f56a3f36788a@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!feeds.phibee-telecom.net!newsfeed.xs4all.nl!newsfeed8.news.xs4all.nl!85.12.16.68.MISMATCH!peer01.ams1!peer.ams1.xlned.com!news.xlned.com!peer01.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!o24no3963185qtl.0!news-out.google.com!x7ni693qtf.0!nntp.google.com!o24no3963172qtl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<780a7f39-337b-4b6b-810f-7c4151e10f74@googlegroups.com> <5d9669cf$0$543$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
X-Received: by 2002:a0c:ec46:: with SMTP id n6mr11110486qvq.23.1570141242609; Thu, 03 Oct 2019 15:20:42 -0700 (PDT) X-Received: by 2002:a25:dd45:: with SMTP id u66mr7559242ybg.39.1570141242408; Thu, 03 Oct 2019 15:20:42 -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!feeds.phibee-telecom.net!newsfeed.xs4all.nl!newsfeed8.news.xs4all.nl!85.12.16.68.MISMATCH!peer01.ams1!peer.ams1.xlned.com!news.xlned.com!peer01.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!o24no3963185qtl.0!news-out.google.com!x7ni693qtf.0!nntp.google.com!o24no3963172qtl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Thu, 3 Oct 2019 15:20:42 -0700 (PDT) In-Reply-To: <5d9669cf$0$543$65785112@news.neostrada.pl> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=159.205.34.49; posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj NNTP-Posting-Host: 159.205.34.49 References: <780a7f39-337b-4b6b-810f-7c4151e10f74@googlegroups.com> <5d9669cf$0$543$65785112@news.neostrada.pl> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <88bd1fd1-2d3a-499f-9479-f56a3f36788a@googlegroups.com> Subject: Re: Błąd preprocesora czy czegoś nie rozumiem? From: "M.M." <mmarszik@gmail.com> Injection-Date: Thu, 03 Oct 2019 22:20:42 +0000 X-Received-Bytes: 2933 X-Received-Body-CRC: 1637520405 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit