Portál AbcLinuxu, 1. června 2025 03:00


Dotaz: Podivné define

Belik avatar 22.4.2011 14:46 Belik | skóre: 14 | blog: belik
Podivné define
Přečteno: 194×
Odpovědět | Admin
Pěkný den! Setkal jsem se se zápisem v C:
#define EXAMPLE(x) st( EX = 1; )
kde EX je navíc prvek struktury. Mohl by mi někdo zkušenější objasnit, o co jde. Díky
Slackware->Mandriva->*buntu->Fedora->Slackware + Debian
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.4.2011 14:56 Sten
Rozbalit Rozbalit vše Re: Podivné define
Odpovědět | | Sbalit | Link | Blokovat | Admin
Těžko říct, vypadá to, že st a možní i EX jsou taky nějaká makra. Rozhodně je divný, když to makro má parametr x, který nepoužívá.
Belik avatar 22.4.2011 15:10 Belik | skóre: 14 | blog: belik
Rozbalit Rozbalit vše Re: Podivné define
Ten parametr je asi jen kvuli uniformitě, protože, pod tím následuje něco ve stylu:
#define EXAMPLE_OFF(x) st( (x) = EX; EX = 0; )
Slackware->Mandriva->*buntu->Fedora->Slackware + Debian
Belik avatar 22.4.2011 15:20 Belik | skóre: 14 | blog: belik
Rozbalit Rozbalit vše Re: Podivné define
Mě je tam podivný ten středník, ale pokud by st bylo makro, např v tomto stylu:
#define st(x) {x}
#define a(a) st( a = 1; )

int main(void){
  
  int a = 5;
  a(a);
  ....
}
pak by to smysl dávalo
Slackware->Mandriva->*buntu->Fedora->Slackware + Debian
22.4.2011 15:20 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Podivné define
Odpovědět | | Sbalit | Link | Blokovat | Admin
Příliš mnoho zamlčených informací. Obvykle pomáhá najít si příklad použití a projít si, jak se to expanduje (a případně ověřit pomocí 'gcc -E').
22.4.2011 23:07 l4m4
Rozbalit Rozbalit vše Re: Podivné define
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dělá to to, že
EXAMPLE(foo)
s jakýmkoli (jedním) argumentem foo expanduje na
st( EX = 1; )
To je celé, nic více ani nic méně to nedělá.

Pak tam samozřejmě mohou být jiné věci, které něco dělají, jako st a EX, ale o těch nic nevíme. Je zapotřebí si buď ty definice projít všechny, nebo použít gcc -E, jak radí Michal.
Belik avatar 23.4.2011 18:02 Belik | skóre: 14 | blog: belik
Rozbalit Rozbalit vše Re: Podivné define
Na co to expanduje je mi jasné - mě tam nehrál ten středník, protože
st( EX = 1; )
není příliš validní výsledek pro kompilaci, ale ono to skutečně expanduje ještě dál...je to truchu zamotané a trvalo mi, než sem se v tom zorientoval...teď už se v tom docela orientuji.
Přesně taková nakopnutí sem potřeboval...díky!
Slackware->Mandriva->*buntu->Fedora->Slackware + Debian

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.