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

Czy istnieje możliwość zadeklarowania funkcji o zmiennej liczbie argumentów

ravmar 01 Mar 2013 21:08 1173 9
  • #1 12004314
    ravmar
    Poziom 22  
    Zależy mi na stworzeniu funkcji, do której mógłbym podawać dowolną liczbę argumentów. Poczyniłem próby z czymś takim
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Niestety bezskutecznie wypluwa mi błąd conflicting types for 'average'
    Czy można sobie z tym poradzić lub zastosować inny sposób ?
  • #2 12004392
    BlueDraco
    Specjalista - Mikrokontrolery
    Skoro najpierw kazałeś kompilatorowi average jako zwracającą int, a potem zadeklarowałeś ją jako float, to czemu się dziwisz? Czytaj uważnie ostrzeżenia, a nie tylko błędy.
  • #3 12004421
    ravmar
    Poziom 22  
    BlueDraco napisał:
    Skoro najpierw kazałeś kompilatorowi average jako zwracającą int, a potem zadeklarowałeś ją jako float, to czemu się dziwisz? Czytaj uważnie ostrzeżenia, a nie tylko błędy.


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Nie rozumiem ?
  • Pomocny post
    #4 12004450
    BlueDraco
    Specjalista - Mikrokontrolery
    Przeczytaj ostrzeżenie dotyczące linii b = average(...

    Kompilator zapewne ostrzega Cię w tej linii o niejawnej deklaracji.

    W tym momencie następuje deklaracja average jako zwracającej int.

    Dobry zwyczaj - definiuj funkcje powyżej miejsca, w którym ich używasz.

    A w ogóle to wiesz, że ta funkcja nie ma sensu w takiej postaci?
  • #5 12004475
    ravmar
    Poziom 22  
    BlueDraco napisał:
    Przeczytaj ostrzeżenie dotyczące linii b = average(...
    Kompilator zapewne ostrzega Cię w tej linii o niejawnej deklaracji.
    W tym momencie następuje deklaracja average jako zwracającej int.
    Dobry zwyczaj - definiuj funkcje powyżej miejsca, w którym ich używasz.

    Dziękuje, działa
    BlueDraco napisał:

    A w ogóle to wiesz, że ta funkcja nie ma sensu w takiej postaci?

    Dlaczego ?
  • #6 12004545
    BlueDraco
    Specjalista - Mikrokontrolery
    Np dlatego, że wywołanie funkcji zajmuje więcej czasu i miejsca, niż policzenie tego, co ona ma liczyć, w jednej instrukcji w C.
  • #7 12004568
    ravmar
    Poziom 22  
    A to rozumiem. Chciałem tylko w jakiś prosty sposób wypróbować działanie funkcji z wieloma parametrami. Docelowo ma liczyć CRC8 wiadomości różnych ciągów bajtów i zwracać wskaźniki początku ramki i jej końca.
  • #8 12004660
    BlueDraco
    Specjalista - Mikrokontrolery
    Przekaż adres wektora i jego długość - będzie sporo szybciej i wygodniej,
  • #9 12004703
    ravmar
    Poziom 22  
    Moje pytanie automatycznie powinno mnie odesłać do podręczników, ale zaryzykuję i je zadam
    BlueDraco napisał:
    Przekaż adres wektora i jego długość - będzie sporo szybciej i wygodniej,

    Dlaczego ?
  • #10 12004945
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Bo nie ma najmniejszej potrzeby tworzyć kopii każdego bajtu który chcesz przetwarzać (przekazując przez wartość), a przy okazji z dużym prawdopodobieństwem i tak masz te dane w jakiejś tablicy.

    4\/3!!
REKLAMA