🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#309945
From: PawelS pawel(at)wbcd(dot)pl
Date: Wed, 09 Oct 2019 16:57
51 lines
2731 bytes
M.M. pisze:
> 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?
Makro TEST1 tylko dlatego, że występuje w kodzie tylko 1 raz.
Sprawdzałeś ? Czy zadziała gdy będzie występować 2 razy ?

	TEST1( x );
	TEST1( x );

a.c:9: error: redefinition of ‘x’
a.c:8: error: previous definition of ‘x’ was here
Technical Details
Message-ID: <5d9e1177$0$511$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <780a7f39-337b-4b6b-810f-7c4151e10f74@googlegroups.com> <5d9669cf$0$543$65785112@news.neostrada.pl> <88bd1fd1-2d3a-499f-9479-f56a3f36788a@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Date: Wed, 09 Oct 2019 18:57:10 +0200
From: "PawelS pawel(at)wbcd(dot)pl" <fake@email.org>
User-Agent: Thunderbird 2.0.0.18 (X11/20081120)
MIME-Version: 1.0
Newsgroups: pl.comp.lang.c
Subject: Re: Błąd preprocesora czy
 czegoś nie rozumiem?
References: <780a7f39-337b-4b6b-810f-7c4151e10f74@googlegroups.com> <5d9669cf$0$543$65785112@news.neostrada.pl> <88bd1fd1-2d3a-499f-9479-f56a3f36788a@googlegroups.com>
In-Reply-To: <88bd1fd1-2d3a-499f-9479-f56a3f36788a@googlegroups.com>
Lines: 51
Message-ID: <5d9e1177$0$511$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 89.231.96.70
X-Trace: 1570640249 unt-rea-b-01.news.neostrada.pl 511 89.231.96.70:56087
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit