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.

Nieprawidłowe makro w AVRGCC

Pocieszny 30 Gru 2015 00:24 855 10
  • #1 30 Gru 2015 00:24
    Pocieszny
    Poziom 38  

    Próbuję zdefiniować takie makra w Atmel Studio:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Pierwsze z nich wywołuje taki błąd podczas kompilacji:

    Cytat:
    expression cannot be used as a function


    Ten kod znalazłem na wielu stronach internetowych i ponoć ma działać. Co jest z nim nie tak?

    0 10
  • Pomocny post
    #2 30 Gru 2015 00:38
    2675900
    Użytkownik usunął konto  
  • #3 30 Gru 2015 12:40
    Pocieszny
    Poziom 38  

    Znalazłem problem: brakujący średnik na końcu linii poprzedzającej użycie tego makra.

    0
  • #4 30 Gru 2015 13:40
    tmf
    Moderator Mikrokontrolery Projektowanie

    Pocieszny napisał:
    Znalazłem problem: brakujący średnik na końcu linii poprzedzającej użycie tego makra.


    M.in. dlatego makra są złe i należy ich unikać. W czym twoje makro jest lepsze od jawnie zadeklarowanej funkcji, poza tym, że nie oferuje kontroli typów, potencjalnie powoduje wyrzucanie błedów w zupełnie niezwiązanych z problemem regionach kodu, czy problemach z debugowaniem?

    0
  • #5 30 Gru 2015 14:58
    2675900
    Użytkownik usunął konto  
  • #6 30 Gru 2015 15:31
    tmf
    Moderator Mikrokontrolery Projektowanie

    Są może dwa, trzy przypadki w których użycie makra jest uzasadnione. Zazwyczaj używanie makr świadczy o nieznajomości języka, a katastrofa z tego wynikająca jest tylko przez użycie makra pogłębiana. A używane IDE nie ma tu żadnego znaczenia.

    0
  • #7 30 Gru 2015 15:53
    2675900
    Użytkownik usunął konto  
  • #8 30 Gru 2015 16:05
    tmf
    Moderator Mikrokontrolery Projektowanie

    Piotrus_999 napisał:
    tmf napisał:
    Zazwyczaj używanie makr świadczy o nieznajomości język

    No to wiekszość kodu (jezeli nie całosc) na swiecie napisali ludzie nie znający języka programowania.


    Zazwyczaj != zawsze. Swoją droga z błędnych przesłanek wyciągnąłeś prawidłowy wniosek - idę o zakład, że większość kodu (ilościowo) napisali ludzie nieznający języka...

    Piotrus_999 napisał:
    tmf napisał:
    A używane IDE nie ma tu żadnego znaczenia


    No przy pisaniu debugowaniu nieco ma - jak nie mozesz podejrzec zdefiniowanej wartości to jest mniej wygodnie jednak.


    Jeśli nie możesz... A kto powiedział, że w AS nie możesz? Znowu "nie wiem jak" != "nie da się".

    0
  • #9 30 Gru 2015 17:13
    2675900
    Użytkownik usunął konto  
  • #10 30 Gru 2015 21:05
    grko
    Poziom 33  

    Zapodałeś kod z kernela jako przykład niezrozumiałego kodu tylko z tego powodu, że jest dużo preprocesora. Brawo. Ten moduł jest bardzo dobrze opisany w nagłówku. Akurat za pomocą preprocesora da się zrobić naprawdę fajne rzeczy w C. Przykładowo template w C, inicjalizacja skomplikowanych obiektów. Poza tym czepianie się marka:

    Kod: c
    Zaloguj się, aby zobaczyć kod



    jest niedorzeczne choćby z tego powodu, że nie to makro było źródłem błędu w programie autora.

    0
  • #11 30 Gru 2015 21:28
    2675900
    Użytkownik usunął konto