Zadatak u mako kao funkcija u C

Zadatak u mako kao funkcija u C

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Ovako, dobio sam vezbu da napravim umesto funkcije znak() iz sledeceg programa da stavim kao makro kao funkcija. Evo programa:
#include <stdio.h> #include <stdlib.h> #define BRLIN 10 void znak (int n, char ch) {     while (n-- > 0)       putchar (ch); } int main (void) {    int n;    for (n = 1; n <= BRLIN; ++n) {         znak (n, '*');       putchar ('\n');    }    return EXIT_SUCCESS; }

Ja, uopste ne razumem kako da napravim, krenuo bih ovako, ali..
#define STRING(broj, znak) (((broj) ..pa sta treba dalje.

Hvala uanpred!



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Pišem iz glave, pa možda neće raditi:
#include <stdio.h> #include <stdlib.h> #define BRLIN 10 #define znak(n, ch) while (n-- > 0) putchar (ch) int main (void) {    int n;    for (n = 1; n <= BRLIN; ++n) {         znak(n, '*');       putchar ('\n');    }    return EXIT_SUCCESS; }



offline
  • Na odmoru xD
  • Na odmoru xD
  • Pridružio: 15 Feb 2012
  • Poruke: 430

@Srki_82 to gore nece uspet zbog konflikta while petlje u makrou i for petlje. Makro petlja smanjuje a for petlja povecava n.
#include <stdio.h> #define znak(n,ch) while (n-- > 0) {putchar(ch); putchar('\n');} int main(void) {    int n = 10;    znak(n,'*');    system("PAUSE");    return 0; }
Ovako bi jato resio.
Prvi put cujem(procitao sam negde da se tako po neki put definicu getchar() i putchar()) za ovakve funkcije (kao makro) da li su one brze od obcnih?

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Ako je samo to problem, onda može ovako Very Happy
#include <stdio.h> #include <stdlib.h> #define BRLIN 10 #define znak(n, ch) int i = n; while (i-- > 0) putchar (ch) int main (void) {    int n;    for (n = 1; n <= BRLIN; ++n) {         znak(n, '*');       putchar ('\n');    }    return EXIT_SUCCESS; }
Tako kod izgleda isto bez obzira da li koristiš funkciju ili makro Smile

Makroi su brži od funkcija jer nisu funkcije Very Happy Kad pozoveš funkciju, program mora da spremi stack memoriju za nju, da prenese promenljive, da snimi razna trenutna stanja i registre, da promeni pokazivač instrukcije na početak funkcije i još mnogo drugih stvari. S druge strane, makro se prilikom kompajliranja bukvalno zameni kodom koji ga definiše. Kao da si uradio Search and replace i zamenio makro kodom koji se nalazi desno od njega. Na taj način dobijaš bržu, ali i veću izvršnu datoteku.

Postoje još i inline funkcije koje se ponašaju skoro isto kao i makroi, ali nemaju svi kompajleri podršku za njih.

offline
  • Na odmoru xD
  • Na odmoru xD
  • Pridružio: 15 Feb 2012
  • Poruke: 430

A treabo je da ispadne kao taj trougao Very Happy Nisam shvatio sve dok nisam kompajliro Laughing

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Hvala vam puno, obojici, Znam da su makroi brzi ali ce biti veca kolicina programa, ali su zato funkcije sporije ali manja kolicina programa. Zato treba da se kombunuju i makroi i funkcije kako bi se dostigla neka ravnoteza.

Hvala vam!

Ko je trenutno na forumu
 

Ukupno su 900 korisnika na forumu :: 18 registrovanih, 1 sakriven i 881 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, bigfoot, bojcistv, Darko001, dekan.m, drimer, Georgius, HrcAk47, Milometer, mrav pesadinac, mrvica78, Oscar2, panzerwaffe, S2M, Srki94, zdrebac, zziko, šumar bk2