logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[AVR][C] - parametry funkcji

mirekk36 02 Lis 2008 11:12 2530 3
  • #1 5692727
    mirekk36
    Poziom 42  
    Witam,

    Panowie czy można uzyskać taki efekt w C aby można było w definicji funkcji zdeklarować w obszarze parametrów - od razu jego domyślną wartość? Chodzi o to aby później wykorzystjąc funkcję nie trzeba było ew wprowadzać tego domyślnego parametru, no chyba, że chcemy aby miał jednak inną wartość. Mam coś takiego w Borlandowskim pascalu ale nie wiem czy tu w avr gcc też tak można? np:

    void moja_funkcja(uint8_t param1 , uint8_t param2 = 10)


    dzięki czemu później w kodzie mógłbym pisać tak:

    moja_funkcja(23);

    (czyli przekazuję param1 = 23 oraz param2 = domyślnie 10)


    albo tak:

    moja_funkcja(23, 77);

    (a tu przekazuję param1 = 23 oraz pram2 = 77 zmiana domyślnej wartości)

    ... czy może jakoś inaczej można sobie radzić jak ma się takie potrzeby w C ?
  • Pomocny post
    #2 5693117
    Freddie Chopin
    Specjalista - Mikrokontrolery
    mozna sobie radzic inaczej, bo tak jak napisales sie nie da. tak naprawde pascal zapewne sam dodawal wtedy ten parametr, wiec ani to oszczednosc kodu, ani to oszczednosc pamieci.

    co do innych sposobow - 'sky is the limit'. niemniej jednak jesli nie masz wyjatkowo wielkiej potrzeby, to lepiej dac sobie spokoj z kombinowaniem. najelegantszym sposobem jest funkcja typu variadic, ale pamietaj, ze nic nie jest za darmo - funkcja ta zajmuje sporo stosu, a i obsluge tego domyslnego parametru i tak musialbys zrealizowac sam, wiec jak dla mnie bez sensu.

    najprosciej zrob sobie makro:

    int funkcja(int a,int b);

    #define funkcja_short(x) funkcja(x,10);

    4\/3!!
  • #4 5695769
    Dr.Vee
    VIP Zasłużony dla elektroda
    To ja jeszcze dorzucę swoje 3 grosze... ;)

    Możesz tak napisać, jeśli użyjesz kompilatora C++. Czyli zamiast avr-gcc używasz avr-g++ - są pewne niuanse przy kompilowaniu kodu C przez kompilator C++, ale właściwie są to różnice tylko na plus :)

    Jeśli chodzi o funkcje varadic, to muszą one przekazywać parametry na stosie (domyślnie parametry są przekazywane w rejestrach r8-r25), a poza tym jakoś trzeba przekazać typ oraz liczbę argumentów do funkcji (w printf zajmuje się tym napis formatu).

    Pozdrawiam,
    Dr.Vee
REKLAMA