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.

Makro w GCC-analiza działania

Krzych12 13 Wrz 2011 20:45 682 4
  • #1 13 Wrz 2011 20:45
    Krzych12
    Poziom 12  

    Witam

    Przeglądając źródła jakiegoś programu w c pod Atmege znalazłem takie makro:

    #define a(n) 0x##n##UL

    Dokładnie nie wiem jak działa, i jak mogę je wykorzystać. Przeglądając internet w jednym z manuali znalazłem że zapis ## usuwa spacje przed stringiem aż do napotkania przecinka.
    Proszę o wyjaśnienie tego makra

    0 4
  • #2 13 Wrz 2011 21:11
    krru
    Poziom 32  

    Z tym przecinkiem to dziwne, ## skleja dwa napisy bez spacji pomiędzy nimi.
    Podane makro robi po prostu stala szesnastkową.
    a(12D4) da 0x12D4UL - szesnastkowy zapis wartości typu unsigned long

    0
  • #3 14 Wrz 2011 17:51
    Krzych12
    Poziom 12  

    Czy dobrze rozumiem literki UL oznaczają cyfrę unsigned long w tym przypadku 32-bitową bez znaku, 'n' oznacza liczbę szesnastkową. Ponieważ piszę trochę w GCC czy jest jakiś do tego manual ?

    0
  • #5 14 Wrz 2011 20:24
    directx11
    Poziom 17  

    Krzych12 napisał:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Dokładnie nie wiem jak działa, i jak mogę je wykorzystać. Przeglądając internet w jednym z manuali znalazłem że zapis ## usuwa spacje przed stringiem aż do napotkania przecinka.
    Proszę o wyjaśnienie tego makra


    Dokładniej mówiąc ## jest to swego rodzaju operator, który służy do sklejania (łączenia) argumentów bez pozostawiania pomiędzy nimi spacji, więc może stąd Ci się to wzięło o tych spacjach, np. taki prosty zapis:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Jest to robione na poziomie preprocesora, więc za pomocą takiego makra można sobie np. wygenerować nazwy zmiennych, które nie są nigdzie zadeklarowane a są w programie używane (żeby komuś trochę utrudnić życie :).

    0