Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

gde je poziv makroa?

[es] :: C/C++ programiranje :: gde je poziv makroa?

[ Pregleda: 2644 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Pretender

Član broj: 12407
Poruke: 100
*.sab.sezampro.yu



Profil

icon gde je poziv makroa?03.03.2004. u 20:57 - pre 245 meseci
Code:

//FuctionTable.cpp
#include <iostream>
#include <conio>
using namespace std;

// A macro to define dummy functions:
#define DF(N) void N() { \
   cout << "function " #N " called..." << endl; }

DF(a); DF(b); DF(c); DF(d); DF(e); DF(f); DF(g);

void (*func_table[])() = { a, b, c, d, e, f, g };

int main() {
  while(1) {
    cout << "press a key from 'a' to 'g' "
      "or q to quit" << endl;
    char c, cr;
    cin.get(c); cin.get(cr); // second one for CR
    if ( c == 'q' )
      break; // ... out of while(1)
    if ( c < 'a' || c > 'g' )
      continue;
    (*func_table[c - 'a'])();
  }
getch();
} ///:~


1) Sta je CR, i sta radi get(cr) kada unosimo samo 1 karakter?
2) Ne vidim nigde poziv makroa, nego samo poziv f-je (npr. d), koja (tako se cini, mada stvar radi) ne moze da dodje do svoje definicije (?)
3) Cemu DF(a), DF(b),... (odgovor verovatno u sklopu 2))

Nista od ovoga autor nije objasnio.

Tx
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.adsl.zonnet.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: gde je poziv makroa?03.03.2004. u 21:59 - pre 245 meseci
Citat:
1) Sta je CR, i sta radi get(cr) kada unosimo samo 1 karakter?
2) Ne vidim nigde poziv makroa, nego samo poziv f-je (npr. d), koja (tako se cini, mada stvar radi) ne moze da dodje do svoje definicije (?)
3) Cemu DF(a), DF(b),... (odgovor verovatno u sklopu 2))
1) Kada uneseš znak sa tastature, ti zapravo upisuješ dve stvari: taj znak i jedno „\n“. cr služi da poklopa taj znak za novi red.
2) Makro se nigde ne poziva, već služi (i to loše) za proizvodnju duplikata funkcija. U C++-u to treba da se radi pomoću šablona (templates), a ne pomoću makroa. Ima puno boljih načina da se ista stvar uradi, ova je otprilike druga najgora mogućnost.
3) da, u sklopu 2) :)

f

 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.winn.dial.virgin.net



+4 Profil

icon Re: gde je poziv makroa?03.03.2004. u 21:59 - pre 245 meseci
Makro ti je definisao funkcije, tako da je, npr. funkcija "a" definisana kao :
Code:

void a()
{
  cout << "function a called..." << endl;
}

gde je konkatenacija stringova iskorshtena za ispis (ako te to buni)

Linija
Code:
DF(a); DF(b); DF(c); DF(d); DF(e); DF(f); DF(g);

definishe sve funkcije na gore pomenuti nachin (znachi a(), b(), c() itd.)

Nakon toga su funkcije zalepljene u niz pointera na funkcije i iskorishcen je trik u
Code:
(*func_table[c - 'a'])();

da se adresira funkcija shodno char parametru, tako da ako je c=='a' onda je index niza nula, shto je ustvari namapirano na funkciju a() itd.

Nadam se da je malo jasnije :)


 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.adsl.zonnet.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: gde je poziv makroa?03.03.2004. u 22:10 - pre 245 meseci
Јоš jedna sitnica: mnogi kompajleri imaju opciju -E koja ti omogućava da vidiš kako izgleda kod pošto ga pretprocesor „propusti kroz šake“. Da bi video šta je kompajler napravio od tvog koda možeš probati ovo, ako koristiš GCC:

Code:
g++ -E datoteka.cpp


f

 
Odgovor na temu

Pretender

Član broj: 12407
Poruke: 100
*.ppp-bg.sezampro.yu



Profil

icon Re: gde je poziv makroa?04.03.2004. u 00:58 - pre 245 meseci
OK.Tx.
Samo, sto se tice CR-a; 1) da li to znaci da je cin.get(cr) obavezno kad god se koristi cin.get(nesto)? 2) sta bi se desilo da se to izostavi ? 3) zasto ovde nije korisceno cin >> c , i zasto se uz taj oblik ne stavlja cin.get(cr) ?

P.S.
Zna li se kako izgleda komanda -E u Borlandu ?
g++ sam skinuo nedavno, ali mi se ucinilo da je instalacija suvise komplikovana (nema SETUP file) pa sam se vratio na B6 (sa Bturbo4.5 jer ne podrzava standard - DT je /of kors/ bio u pravu).
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.adsl.zonnet.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: gde je poziv makroa?04.03.2004. u 01:27 - pre 245 meseci

Citat:

Zna li se kako izgleda komanda -E u Borlandu ?



Probaj da pokreneš kompajler sa opcijom /?


To bi trebalo da izlista sve opcije. Ne bih se iznenadio da je /E ono

što tražiš. Nemam kod sebe Borland C++ da proverim.


f
 
Odgovor na temu

Pretender

Član broj: 12407
Poruke: 100
*.ppp-bg.sezampro.yu



Profil

icon Re: gde je poziv makroa?04.03.2004. u 02:22 - pre 245 meseci
Eh,
da li bi mogao da mi kazes kako da otvorim command line na compileru.
(i inace sam se spremao da zapomazem s tim u vezi)
 
Odgovor na temu

[es] :: C/C++ programiranje :: gde je poziv makroa?

[ Pregleda: 2644 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.