Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATmega 8 - Funkcje inline - statement with no effect

afterparty 04 Paź 2015 11:07 648 6
  • #1 04 Paź 2015 11:07
    afterparty
    Poziom 12  

    Cześć.

    Zacząłem pisać kod obsługujący wyświetlacz od Nokii.
    Zawarty jest on w kilku plikach:

    main.c

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Nokia5110.c:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Nokia5110.h:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Nokia5110_base.c:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Nokia5110_base.h:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jak widać, jeszcze niewiele tu jest.

    Problem pojawia się w pliku Nokia5110_base.c, przy wywołaniach funkcji inline:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Co znaczy statement with no effect wiem, tylko nie wiem czemu się ten problem pojawia. Może ktoś wyjaśnić?

    0 6
  • #2 04 Paź 2015 11:11
    excray
    Poziom 39  

    Po co takie dziwolągi tworzysz? Cała funkcja i na dodatek inline tylko po to aby wpisać jedną linijkę? Zastosuj "#define". Za kilka miesięcy jak wrócisz do tego kodu to dostaniesz oczopląsu od przewijania kodu w celu sprawdzenia co poszczególne funkcje zawierają. A tak w ogóle to funkcje umieszcza się w pliku *.c a w *.h są tylko deklaracje.

    -1
  • Pomocny post
    #3 04 Paź 2015 11:41
    grko
    Poziom 32  

    @excray
    To wlasnie funkcje inline sie umieszcza w naglowku (jezeli planuje sie uzywac je w wielu modulach). Kolega zapomniał jeszcze o static.

    BTW. To nie jest wywolanie funkcji :)

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #4 04 Paź 2015 12:26
    afterparty
    Poziom 12  

    He, sory, chyba spałem jeszcze jak to pisałem ;) (Dla tych, którzy też nie zauważyli - nie było nawiasów)

    A co z tymi funkcjami inline? Chciałem, żeby program był czytelny. Używać ich, czy wystarczy #define? Inline w ogóle zajmują miejsce w pamięci?

    0
  • Pomocny post
    #5 04 Paź 2015 12:52
    tmf
    Moderator Mikrokontrolery Projektowanie

    afterparty napisał:

    A co z tymi funkcjami inline? Chciałem, żeby program był czytelny. Używać ich, czy wystarczy #define? Inline w ogóle zajmują miejsce w pamięci?


    Oczywiście używać inline - unikaj define jak ognia, to dyrektywa preprocesora, która tylko wprowadza zamieszanie. Obecnie nie ma za wiele sytuacji, w których należy ją używać. Napewno nie należy jej używać wtedy, gdy to samo można zrobić przy pomocy funkcji inline i generalnie języka C. Pamiętaj, że korzystanie z define eliminuje np. kontrolę typów, kod jest po prostu osadzany w miejscu wywołania, a kontrola składni jest wykonywana w miejscu osadzenia, a nie w miejscu występowania definicji. W efekcie jakiś głupi błąd w definicji, np. brak średnika może ujawnić się w zupełnie niespodziewanym miejscu. Jeszcze gorzej z argumentami dla definicji, bo nie podlegają one regułom języka C.
    Funkcje inline zazwyczaj są osadzane w miejscu wywołania, kompilator raczej nie tworzy do nich wywołań. Piszę raczej, gdyż kompilator to sprytna bestia i kalkuluje co się bardziej opłaca. To tez zależy od opcji z jakimi kompilujesz program. Z pewnością, krótkie, jedno, dwulinijkowe funkcje warto pisać jako inline.

    0
  • #7 04 Paź 2015 13:06
    afterparty
    Poziom 12  

    Ok, dzięki za info. Biorę się za resztę.

    Miłego dnia

    0