🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#309944
From: M.M.
Date: Thu, 03 Oct 2019 22:20
43 lines
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-mail
References: <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