[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

D³ugie makro

Megas

3/1/2007 10:58:00 PM

Witam,

Mam do zdefiniowania d³ugie makro w C++ pod VS2005. Jak mozna z³amaæ makro
na swie linijki?

#define (a, b, c, d, e, f, g, h, i, j, k, l) a * (b+1) * (c+2) *
(d+3) * (e+4) * (f+5) * (g+6) * (h+7) * (i+8) * (j+9) * (k+10) * (l*11)

Kto sie spotka³ z tym problemem??

Pozdr
Marcin O.


12 Answers

Damian 'legion' Szuberski

3/1/2007 11:01:00 PM

0

On 2007-03-01, Marcin O. wrote:
> Mam do zdefiniowania d3ugie makro w C++ pod VS2005. Jak mozna z3amaa makro
> na swie linijki?
>
> #define (a, b, c, d, e, f, g, h, i, j, k, l) a * (b+1) * (c+2) *
> (d+3) * (e+4) * (f+5) * (g+6) * (h+7) * (i+8) * (j+9) * (k+10) * (l*11)
>
> Kto sie spotka3 z tym problemem??
Od niepamietnych czasów u?ywaj?c backslasha '\'...

--
Damian Szuberski

Daniel Janus

3/1/2007 11:05:00 PM

0

Dnia 01.03.2007 Marcin O. <kolo25@onet.eu> napisa3/a:

> Mam do zdefiniowania d3ugie makro w C++ pod VS2005. Jak mozna z3amaa makro
> na swie linijki?

Wty3ciachem na koncu wszystkich linijek oprócz ostatniej.
>
> #define (a, b, c, d, e, f, g, h, i, j, k, l) a * (b+1) * (c+2) *
> (d+3) * (e+4) * (f+5) * (g+6) * (h+7) * (i+8) * (j+9) * (k+10) * (l*11)

Nazwe makra Ci wcie3o :)

#define makro(a, b, c, d, e, f, g, h, i, j, k, l) (a * ((b)+1) * ((c)+2) * \
((d)+3) * ((e)+4) * ((f)+5) * ((g)+6) * ((h)+7) * ((i)+8) * ((j)+9) * ((k)+10) * ((l)*11))

Zwróa uwage na nawiasowanie; te dodatkowe poziomy nawiasów s? dobr? praktyk? w
makrach.

Inna rzecz, ?e prawdopodobnie co?, co próbujesz zrobia, da sie zrobia lepiej bez
makr. Mo?e funkcj? inline?

--
Daniel 'Nathell' Janus, GG #1631668, przesunmalpe@nathell.korpus.pl
"Though a program be but three lines long, someday it will have to be
maintained."
-- The Tao of Programming

Raf256

3/1/2007 11:18:00 PM

0

Daniel Janus <slrneuen0r.qrv.przesunmalpe@students.mimuw.edu.pl> Friday 02
of March 2007 00:04

> Inna rzecz, ?e prawdopodobnie co?, co próbujesz zrobia, da sie zrobia
> lepiej bez makr. Mo?e funkcj? inline?

Albo template. U?ywanie w ten sposób makr jest _bardzo_ evil.

--
Raf256

"Ustawowe ograniczenie liczby aptek to nie jest centralne sterowanie."
(C) 2007 cz3owiek popieraj?cy PiS

Megas

3/2/2007 7:27:00 AM

0

>> Mam do zdefiniowania d³ugie makro w C++ pod VS2005. Jak mozna z³amaæ
>> makro
>> na swie linijki?
>
> #define makro(a, b, c, d, e, f, g, h, i, j, k, l) (a * ((b)+1) *
> ((c)+2) * > ((d)+3) * ((e)+4) * ((f)+5) * ((g)+6) * ((h)+7) * ((i)+8) * ((j)+9) *
> > ((k)+10) * ((l)*11))
>

Czy mozliwe jest zlamanie makra w ten sposob:
#define makro(a, b, c, d, e, f, g, h, i, j, k, l) (a * ((b)+1) * ((c)+2) * ((d)+3) * ((e)+4) * ((f)+5) * ((g)+6) * ((h)+7) * ((i)+8) * ((j)+9) * ((k)+10) * ((l)*11))

U mnie kompilator sie wywala? A u Was??


Raf256

3/2/2007 7:34:00 AM

0

Marcin O. <es8jg6$fr5$1@news.onet.pl> Friday 02 of March 2007 08:26

> Czy mozliwe jest zlamanie makra w ten sposob:
> #define makro(a, b, c, d, e, f, g, h, i, j, k, l) > (a * ((b)+1) * ((c)+2) * ((d)+3) * ((e)+4) * ((f)+5) * ((g)+6) > * ((h)+7) * ((i)+8) * ((j)+9) * ((k)+10) * ((l)*11))
>
> U mnie kompilator sie wywala? A u Was??

raf256@lore:~$ cat a.cpp
#define makro(a, b, c, d, e, f, g, h, i, j, k, l) (a * ((b)+1) * ((c)+2) * ((d)+3) * ((e)+4) * ((f)+5) * ((g)+6) * ((h)+7) * ((i)+8) * ((j)+9) * ((k)+10) * ((l)*11))

int main() { }

raf256@lore:~$ g++ a.cpp && echo "OK"
OK


--
Raf256

"Ustawowe ograniczenie liczby aptek to nie jest centralne sterowanie."
(C) 2007 cz3owiek popieraj?cy PiS

Jacek Czerwinski

3/2/2007 7:41:00 AM

0

Dnia Fri, 2 Mar 2007 08:26:36 +0100, Marcin O. napisa3(a):

>>> Mam do zdefiniowania d3ugie makro w C++ pod VS2005. Jak mozna z3amaa
>>> makro
>>> na swie linijki?
>>
>> #define makro(a, b, c, d, e, f, g, h, i, j, k, l) (a * ((b)+1) *
>> ((c)+2) * >> ((d)+3) * ((e)+4) * ((f)+5) * ((g)+6) * ((h)+7) * ((i)+8) * ((j)+9) *
>> >> ((k)+10) * ((l)*11))
>>
>
> Czy mozliwe jest zlamanie makra w ten sposob:
> #define makro(a, b, c, d, e, f, g, h, i, j, k, l) > (a * ((b)+1) * ((c)+2) * ((d)+3) * ((e)+4) * ((f)+5) * ((g)+6) > * ((h)+7) * ((i)+8) * ((j)+9) * ((k)+10) * ((l)*11))
>
> U mnie kompilator sie wywala? A u Was??

A u "was" jest jaki? komunikat o b3edzie?

Makrami pokaleczysz sobie paluchy. Polecam inline (jak typ jest znany) lub
template. Dostepne s? w nowszych kopilatorach C i wysztkich C++.

Podobne nadu?ywanie makr jest modne np. w kregach mikroprocesorowych (przy
brakach pe3nej znajomo?ci jezyka i jego innych mo?liwo?ci)

Megas

3/2/2007 8:35:00 AM

0


U¿ytkownik "Jacek Czerwinski" <x@y.z.pl> napisa³ w wiadomo¶ci
news:1cdbf7xg1q0ru$.1d88jcuinrewo$.dlg@40tude.net...
>
> Makrami pokaleczysz sobie paluchy. Polecam inline (jak typ jest znany) lub
> template. Dostêpne s± w nowszych kopilatorach C i wysztkich C++.
>
> Podobne nadu¿ywanie makr jest modne np. w krêgach mikroprocesorowych (przy
> brakach pe³nej znajomo¶ci jêzyka i jego innych mo¿liwo¶ci)

Ok. To wyjasniam uzycie makra:

Mam funkcje, ktora zostaje urzyta w sytuacji, gdy wysypie sie jakis blad.
Funkcja ta pobiera kilka informacji o bledzie, w tym informacje w ktorej
linii i w jakim pliku powstal blad. To pobierania info o linii i pliku
zrodlowym uzywam makr predefiniowanych __LINE__ oraz __FILE__. Nie chce mi
sie w kazdym miejscu wywolania funkcji wpisywac ow makr, dlatego
zdefiniowalem sbie wlasne makro, ktore wywoluje funkcje wraz z uzycie
powyzszych makr.
czyli:

#define makro( info, code ) GenException( info, code, __LINE__,
__FILE__ )

uzycie w tym przypadku funkcji inlinne nie da tego samego efektu, tzn. makra
__LINE__ oraz __FILE__ zawsze beda zawierac linie i plik zrodlowy funkcjie
inlinee co jest bezuzyteczne.

Pozdrawiam


Marcin 'Qrczak' Kowalczyk

3/2/2007 8:58:00 AM

0

Dnia 02-03-2007, pia o godzinie 08:26 +0100, Marcin O. napisal(a):

> #define makro(a, b, c, d, e, f, g, h, i, j, k, l) > (a * ((b)+1) * ((c)+2) * ((d)+3) * ((e)+4) * ((f)+5) * ((g)+6) ^
Powinno byc (a), a nie a.

--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.p...

Marcin 'Qrczak' Kowalczyk

3/2/2007 9:00:00 AM

0

Dnia 02-03-2007, pia o godzinie 08:26 +0100, Marcin O. napisal(a):

> * ((h)+7) * ((i)+8) * ((j)+9) * ((k)+10) * ((l)*11))
^
To mnozenie wyglada podejrzanie, skoro wszedzie indziej jest dodawanie.

> U mnie kompilator sie wywala? A u Was??

Co to znaczy "sie wywala"? I przy jakim uzyciu makra?

--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.p...

Megas

3/2/2007 11:07:00 AM

0

> Co to znaczy "siê wywala"? I przy jakim u¿yciu makra?

Dzisiaj sprobowalem ponownie i dziala, cos musialem wczoraj pomylic. Sorry
za zamieszanie...